我正在读一本名为“JavaScript忍者的secret”的好书,作者是JohnResig和BearBibeault。3.2章节给出了例子;varcanFly=function(){returntrue;};然后它说;AnanonymousfunctioniscreatedandassignedtoaglobalvariablenamedcanFly.BecauseofJavaScript'sfunctionalnature,thefunctioncanbeinvokedthroughthisreferenceascanFly().Inthisrespect,it'salmostfun
我的直觉是将代码块封装在像这样的匿名函数中是个好主意:(function(){varaVar;aVar.func=function(){alert('ronk');};aVar.mem=5;})();因为我不再需要aVar,所以我假设垃圾收集器将在超出范围时删除aVar。这是正确的吗?或者解释器是否足够聪明,可以看到我不再使用该变量并立即清理它?是否有任何理由,例如风格或可读性,我应该不以这种方式使用匿名函数?另外,如果我给函数命名,像这样:varoperations=function(){varaVar;aVar.func=function(){alert('ronk');};aVa
假设我得到一个匿名函数,需要对其上下文进行操作,但它是绑定(bind)到“窗口”还是绑定(bind)到未知对象是不同的。如何获取调用匿名函数的对象的引用?编辑,一些代码:varObjectFromOtherLibIAmNotSupposedToknowAbout={foo:function(){//dosomethingon"this"}}varfunctionbar(callback){//hereIwanttogetareferenceto//ObjectFromOtherLibIAmNotSupposedToknowAbout//ifObjectFromOtherLibIAmNo
我已经多次使用setTimeout传递函数作为引用,例如setTimeout(someFunction,3000);在某些情况下,为了保留this的值,我不得不事先将其分配给一个变量,但不明白为什么以下内容不起作用:varlogger={log:function(){varthat=this;console.log(that.msg);setTimeout(that.log,3000);},msg:"test"};logger.log();然而,使用匿名函数确实有效:varlogger={log:function(){varthat=this;console.log(that.msg)
是否可以在下面测试myInnerFunction?varval=function(){varmyInnerfunction=function(input){returninput+'IADDEDTHIS';};returnmyInnerfunction('testvalue');}();因为myInnerFunction本质上是匿名执行的外部函数的私有(private)成员,所以它似乎无法从外部进行测试。 最佳答案 您可以故意向外界公开测试Hook,可能如下所示:varval=function(){varmyInnerfunctio
jQuery开始将其所有代码包装在一个匿名函数中:(function(window,undefined){/*...jquerycode...*/})(window);我知道函数会在整个脚本被读取后立即执行,但参数的目的是什么?一个是全局对象引用,另一个是属性引用。现在,我记得在脚本开发的早期,undefined实际上被定义为其他东西(我没记错吧?)。跟这个有关系吗?另外,这个函数看起来像是被用作运算符?就像上面一样,我完全不理解语句的语法。也许有上下文会有所帮助? 最佳答案 包装器做了很多事情:function(window,un
(function(){vara=function(){alert("heynow!!");};return{"hi":function(){returna;}};})();hi();此代码无效。我如何暴露一个函数?? 最佳答案 自调用函数返回一个属性为hi的对象,这个对象没有被添加到全局作用域中,所以你可以直接使用该属性。将函数的结果放在一个变量中:varo=(function(){vara=function(){alert("heynow!!");};return{"hi":function(){returna;}};})();
我在jshint中收到了警告'[L76:C24]Missingspaceafter'function''我遵循NicholasZakkasMaintainablejavascript风格,匿名函数后没有空格。如何在jshint中删除此警告?.jshintrc{"node":true,"browser":true,"es5":true,"esnext":true,"bitwise":true,"camelcase":true,"curly":true,"eqeqeq":true,"immed":true,"indent":4,"latedef":true,"newcap":true,"n
我正在浏览JIT的代码,我看到了这个:varisGraph=($type(json)=='array');varans=newGraph(this.graphOptions);if(!isGraph)//maketree(function(ans,json){ans.addNode(json);for(vari=0,ch=json.children;i这些匿名函数的目的是什么?它们会立即超出范围,对吗?为什么使用:(function(ans,json){ans.addNode(json);for(vari=0,ch=json.children;i代替:ans.addNode(json)
关于MDNpageforwindow.setTimeout我找到这个例子,其中一个命名函数被传递给window.setTimeout:vartimeoutID;functiondelayedAlert(){timeoutID=window.setTimeout(slowAlert,2000);}functionslowAlert(){alert("Thatwasreallyslow!");}functionclearAlert(){window.clearTimeout(timeoutID);}在我维护的代码中,我遇到了这个例子的等价物,其中声明了一个匿名函数,因为它被传递给windo