草庐IT

Closures

全部标签

javascript - 将 onchange 函数事件附加到变量

我最近接触了闭包和匿名函数,我想知道我的代码是否是正确的方法(它有效!):newInput.onchange=function(x){returnfunction(){PassFileName(x);}}(counter);所以这是在“保存”当前“计数器”值(1,2,3...)的循环中。如果我没有返回函数,那么“counter”将始终是“counter”的最后一个值。我使用该代码是否正确地处理了这个问题?还是有更好的方法来“捕获”当前计数器并将其附加到onchange事件?谢谢! 最佳答案 是的,您正在正确地处理它,但是为了与实现实

Javascript:用另一个函数重新分配一个函数

假设我有这两个功能:functionfnChanger(fn){fn=function(){sys.print('Changed!');}}functionfoo(){sys.print('Unchanged');}现在,如果我调用foo(),我会看到Unchanged,正如预期的那样。但是,如果我先调用fnChanger,我仍然会看到Unchanged:fnChanger(foo);foo();//Unchanged现在,我假设这是因为foo没有通过引用传递给fnChanger,但我可能错了。为什么fnChanger不改变foo来打印Changed!?此外,如何让fnChanger更

javascript - 为什么这个闭包范围的变量会失去它的值(value)?

我在这里看到了这个Javascript测验:http://www.netfxharmonics.com/2008/01/NetFX-Harmonics-JavaScript-Quiz我无法弄清楚这个问题:(function(){vara=1;varb=2;(function(){a=b;varb;})();console.log('a:'+a);//=>"a:undefined"console.log('b:'+b);//=>"b:2"})()但是,如果您从内部函数中删除varb;声明,那么a==2就会如您所料。为什么会这样?(你可以在这里玩:http://jsfiddle.net/g

javascript - 在事件闭包中访问可变变量

我正在尝试使用mousetrapJavascript插件以类似的方式处理一些击键,所以我想按如下方式编写代码:varkeys=['b','i','u'];for(vari=0;i但是,显然,i是可变的。但是,我不确定如何在响应中竞争事件参数的地方编写闭包。关于如何处理这种情况的建议? 最佳答案 howtowriteaclosurewhereIamcompetingtheeventparameterintheresponse在整个循环体周围使用闭包(如@dandavis所示),或者仅在处理程序周围使用它:…Mousetrap.bind

JavaScript:自调用函数返回一个闭包。它是做什么用的?

在研究一个JavaScript库时,我发现了以下结构:theMethod:function(){varm1=newSomeClass();returnfunction(theParameter){this.someMethod();m1.methodCall(this.someField1);this.someField2='somevalue';}}()方法调用如下:c.theMethod(paramValue);作者想通过这个声明表达什么?为什么不使用这样的声明:theMethod:function(theParameter){varm1=newSomeClass();this.s

javascript - 带闭包的 For 循环保存状态

如果这可能是一个新手问题,请原谅我,但这应该可行,不是吗?varelems=[1,2,3,4,5]for(vari=0;i意思是,应该吐出来>>nodefile.js12345出于某种原因,这不是这样做的。而当它在终端中运行时,它会吐出>>nodefile.js1我错过了什么?能否请您详细说明。 最佳答案 因为你是在立即返回IIFE返回的值,所以在这个语句中return(function(e){console.log(e)})(i);由于IIFE只打印0并且没有显式返回任何内容,JavaScript将默认返回undefined并立即

closures - 将参数传递给javascript中的闭包函数

MyLibrary.MyModule=(functioninitialise(){this.id=id;this.c=document.getElementById(id);this.ctx=this.c.getContext('2d');this.properties={setup:{backgroundColour:options.setup.backgroundColour||'black'},scale:{show:options.scale.show||true,colour:options.scale.color||'white'},}console.log(propert

javascript - 在谷歌分析跟踪代码中,为什么他们使用闭包

为什么在googleanalytics跟踪代码中,他们将这些行封装在一个闭包中?(function(){varga=document.createElement('script');ga.type='text/javascript';ga.async=true;ga.src=('https:'==document.location.protocol?'https://ssl':'http://www')+'.google-analytics.com/ga.js';vars=document.getElementsByTagName('script')[0];s.parentNode.i

javascript - 为什么结果不同(使用 var 与 let)?

这使用varvara=[];for(vari=0;i这使用letvara=[];for(leti=0;i我不明白为什么结果不同。有人可以指导我吗? 最佳答案 结果数组由函数组成,每个函数体如下所示:console.log(i);i的值取决于我们是使用var还是let来声明变量。var(ECMAScript5和6)这里的i是一个全局变量,退出循环后的值为10。这是记录的值。让(ECMAScript6)这里的i是一个局部变量,它的作用域被限制在for语句中。此外,这个变量在每次迭代时都会得到一个新的绑定(bind)。这最好由您的代码解释

javascript - 如何将参数传递给使用 setTimeout 调用的函数?

我想将参数传递给使用setTimeout调用的函数。我找到了这三个选项:A=1;//Method1:closurethingssetTimeout(function(){whatsA(A);},100);//Method2:thirdargument(sameresultwith[A])setTimeout(whatsA,100,A);//Method3:evalsetTimeout('whatsA('+A+')',100);A=2;functionwhatsA(X){console.log(X);}这显示了InternetExplorer9中的2、undefined和1。方法1:显然