草庐IT

javascript - 在 Javascript 闭包中访问 'this'

这更像是一种完整性检查。我发现在Javascript中使用闭包时,我经常使用以下模式从函数内部访问封闭类:MyClass.prototype.delayed_foo=function(){varself=this;setTimeout(function(){self.foo();//BeniceifIcoulduse'this'here},1000);};显然这工作得很好,而且使用起来也不是什么大麻烦。我脑子里有个小痒痒在说“你把事情搞得太复杂了,笨蛋!”这是普遍接受的模式吗? 最佳答案 这是普遍接受的模式,但通常使用that而不是

javascript - 函数返回是否需要被称为闭包

嘿,我在youtube上看到了这个视频http://www.youtube.com/watch?v=KRm-h6vcpxs基本上解释了IIFE和闭包。但我不明白的是我是否需要返回一个函数才能将其称为闭包。例如functiona(){vari=10;functionb(){alert(i);}}在这种情况下,我可以将其称为闭包,因为它正在从外部函数的范围访问“i”变量,还是我需要像这样返回函数returnfunctionb(){alert(i);} 最佳答案 闭包只是一个函数,它保持着它的词法环境,直到它自己死了才让它离开。将闭包想象

javascript - 在 TypeScript 中编写闭包

只是为了好玩,我正在尝试在包含闭包的代码中使用TypeScript的强类型。原始JavaScript代码如下所示:varfunc=(function(){varprivate_count=0;varincrement=function(){private_count+=1;returnprivate_count;}returnincrement;}());这是我用TypeScript实现它的最佳尝试:varfunc:()=>()=>number=(function():()=>number{var_count:number=0;varincrement:()=>number=funct

javascript - 闭包中如何引用局部变量?

这个问题在这里已经有了答案:JavaScriptclosureinsideloops–simplepracticalexample(44个答案)关闭8年前。我正在阅读一篇文章(JavaScriptClosuresforDummies),其中一个示例如下。functionbuildList(list){varresult=[];for(vari=0;i当调用testList时,一个警告框显示“item3undefined”。文章有这样的解释:Whentheanonymousfunctionsarecalledonthelinefnlist[j]();theyallusethesamesi

闭包 : help me understand 的 JavaScript 作用域

运行以下代码:for(vari=0;i输出“3”三次。它输出i的最终值,而不是创建内部函数时i的值。如果我希望输出为1、2和3,我将如何编写这段代码?我怎样才能让它在定义函数时使用i的值而不是它的最终值? 最佳答案 for(vari=0;i因此,在setTimeout时间(在我们为setTimeout定义函数的时间),我们调用匿名函数获取val作为参数。这会为每个函数调用创建一个闭包,将val的值存储在我们刚刚调用的函数范围内。我用了self-invokingfunction,它立即创建一个closure.在您提供的代码中,代码创建

javascript - 将带有javascript闭包的参数附加到匿名函数中的默认参数

我想在GooglegeocoderAPI调用中添加一些额外的参数,因为我在循环中运行它,但我不确定如何将闭包参数附加到已经具有由调用API。例如:for(vari=0;i我希望能够在传递的geocoder.geocode()匿名函数中使用i的值,但是如果我有一个闭包使用}(i));例如在第4行这将替换会破坏地理编码器的第一个参数。有没有办法可以使用闭包,或者将i的值传递给匿名函数?实际上我想做的是:geocoder.geocode({'address':address},function(results,status,i){alert(i);//0,1,2,3,4}(i));但工作:-

javascript - 如何阅读 Javascript 闭包语法?

基于DougCrockford讲座中的一些代码,我创建了这个。varisAlphaUser=(function(){alert("FormingAlphaUserList");letAlphaUsers={1234:true,5678:true};returnfunction(id){alert("CheckingAlphaUsers:",id);returnAlphaUsers[id];};}());alert("starting");alert(isAlphaUser(1234));alert(isAlphaUser(5678));alert(isAlphaUser(3456));

javascript - 闭包模板中的逻辑运算符

我正在玩GoogleClosureTemplates并且我无法成功编译某些模板,因为逻辑“and”和“or”运算符似乎无法在if标记内使用(我试过“&&”和“和”以及“||”和“或”)...如何我可以写一个“复杂”的if语句,如:{ifcondition1&&condition2}吗?编辑:以下简单语句引发异常:{if5>2&&2==2}“并非所有代码都采用SoyV2语法(发现标记{if5>2&&2==2}不采用SoyV2语法)” 最佳答案 根据最新版本docs,use可以使用and和or作为逻辑运算符:{if$x>1and$y2}

javascript - 在 JavaScript 闭包中更改全局变量

我正在尝试更改闭包中变量的值:varmyVariable;$.ajax({//stuff....success:function(data){myVariable=data;}});这不起作用,因为myVariable对闭包不可见。如何更改此代码,以便myVariable的值发生变化? 最佳答案 与您的看法相反,您的代码有效。但是看到您正在尝试做的事情并从字里行间看出我猜您正在尝试这样做:varmyVariable;$.ajax({//stuff....success:function(data){myVariable=data;}

JavaScript 闭包和作用域链

谁能解释为什么document.write部分总是输出10?functioncreatFunctions(){varresult=newArray();for(vari=0;i");}我认为这个问题的答案比重复的问题更彻底,因此值得保留这篇文章。 最佳答案 当然可以。在您的for循环中,您引用了i。您期望发生的是每个闭包在创建函数时获得i的快照,因此在第一个函数中它将返回0,然后返回1,等等。真正发生的是每个闭包都获得了对外部变量i的引用,它会随着您在for中更新i而不断更新>循环。所以,第一次通过循环,你得到一个返回i的函数,此时