TOGOUTECH

closures

全部标签

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 - Google Closure 库的基准测试

当我搜索Javascript库的性能时,我得到许多网站显示以下流行库之间的性能比较jQuery(相当慢)原型(prototype)(在IE中很慢)Dojo(涉及DOM时最快)ExtJs(平均)MicroJS(慢但还可以)但在任何基准测试中,GoogleClosureLibrary都不包含在内。它不像任何其他标准库,据说它是一个过程样式库。我需要一些关于Closure库性能的基准测试。并希望获得有关“在初学者阶段使用dojo并在某个中间阶段使用jQuery时切换到Closure库是否好”的建议Google发布它在其所有应用程序(如Gmail等)中使用闭包库...性能非常好。这是因为图书馆

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 - 忽略 Google Closure 中一个文件的编译器警告

我在一个相当大的Closure项目中使用外部库(Phonegap)。不幸的是,Phonegap生成了大量的编译器警告(所有“危险使用”)。足以让我在编译器输出中搜索关于我自己的代码的警告非常烦人。有没有办法让一个文件中的警告静音? 最佳答案 我想你的意思是在使用VERBOSE或checkTypes时出现类型警告。将以下内容放入任何文件:/***@fileoverview*@suppress{checkTypes}*/仅针对该文件关闭类型检查。您还可以@suppress许多其他事情。阅读ClosureCompiler文档了解更多详情。

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)。这最好由您的代码解释