JS中闭包的主要目的是什么。它只用于公共(public)和私有(private)变量吗?或者还有什么我错过的。我正在尝试了解闭包,并且真的很想知道使用它的主要优势是什么。 最佳答案 闭包与javascript的作用域有关。换句话说,由于JavaScript设计者所做的范围选择(即词法范围),闭包是可能的。javascript中闭包的优点是它允许您将变量绑定(bind)到执行上下文。varclosedIn={};varf=function(){closedIn.blah='blah';//closedInwasjust"closedi
这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Whatdoes(function($){})(jQuery);mean?我看过很多具有以下语法的jQuery代码,但我并不真正理解它的含义。它出现在thisanswer中和thisanswer关于代码组织的问题。两者都谈论命名空间,所以我猜这就是它所完成的。varfoo=(function(){varsomeVar;functionsomeFunc(){returntrue;}})();这是命名空间,它是如何工作的?有时最后一组括号中有一个名称(namespace?),有时则没有。两者有什么区别?
这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:HowcanIaccesslocalscopedynamicallyinjavascript?大家好。我们都知道您可以使用[]语法通过名称访问javascript对象的属性。例如ob['nameOfProperty'].你能对局部变量做同样的事情吗?另一个答案here建议答案是使用window['nameOfVar']。但是,这仅适用于发帖人,因为他在窗口级范围内定义变量。我假设这在一般情况下一定是可能的,因为Firefox的Firebug(我相信它是用javascript编写的)可以显示局部变量和闭包变量。
for(vari=0;i如何将somearray或其索引之一传递给匿名函数?somearray已经在全局范围内,但我仍然得到somearray[i]isundefined 最佳答案 匿名函数中的i捕获变量i,而不是它的值。在循环结束时,i等于somearray.length,因此当您调用该函数时,它会尝试访问一个不存在的元素数组。您可以通过创建一个捕获变量值的函数构造函数来解决这个问题:functionmakeFunc(j){returnfunction(){console.log(somearray[j][0]);}}for(va
我在javascript中工作了一段时间,通常做这样的事情只是为了缓存在深层结构或“命名空间”中声明的函数的属性值//globalscope(function($,lib){//functionscope1varformat=lib.format,//insteadofcallinglib.formatallthetimejustcallformattouch=lib.pointer.touch,//insteadofcallinglib.pointer.toucheachtimejusttouch$doc=$(document),log=logger.log;//notconsole
编辑:这只是一个简单的例子,用来说明我对一个更大的程序的担忧。我不会将这个实际代码用于任何事情:)如果我运行这个-functionupdate(amount,win,data){win.innerText='Countis'+amount;setTimeout(function(){update(amount+1,win,{data:'something'})},1000);}window.onload=function(){varwin=document.getElementById('item');update(0,win,0);}对setTimeout的调用可能会创建一个闭包,该
这个问题在这里已经有了答案:HowdoJavaScriptclosureswork?(86个答案)关闭9年前。如何理解Javascript中的闭包?Ingeneralterms,aclosureisafunctionboundtooneormoreexternalvariables.Whenitiscalled,thefunctionisabletoaccessthesevariables.InJavaScript,closuresareoftenimplementedwhenfunctionsaredeclaredinsideanotherfunction.Theinnerfunct
是否可以对闭包中存在的javascript函数进行单元测试,例如,给定以下内容:(function(){vara=function(){//dosomething}window.b=function(){//dosomethingelse}})();是否可以在不公开的情况下对函数a进行单元测试?如果没有,是否有一个很好的方法来公开a,但只能在测试模式下? 最佳答案 你的匿名函数可以接受一个在测试模式下未定义的参数,并说这个参数将是一个对象,你可以用a填充对象而不暴露a直接。只是我的.02$
我有一个这样定义的Javascript“类”:varWelcomer=function(name){varpName=name;varpMessage=function(){return"Hi,"+pName+"!";};return{sayHi:function(){alert(pMessage());}};};newWelcomer('Sue').sayHi();有没有一种方法可以“子类化”Welcomer,以便我可以重新定义公共(public)方法并访问私有(private)方法和变量?以下将使我能够访问公共(public)方法,但不能访问私有(private)方法:varUnh
假设我有以下内容:varfoo=(function(){varbar=0;return{getBar:function(){returnbar;},addOne:function(){bar++;},addRandom:function(rand){bar+=rand;}}})();我有以下内容:varfoo2=function(){varbar=0;this.getBar=function(){returnbar;};this.addOne=function(){bar++;};this.addRandom=function(rand){bar+=rand;}};执行函数的唯一区别是