草庐IT

Closures

全部标签

Javascript 闭包——变量与参数

我正在尝试学习Javascript闭包。我无法理解这样一个事实,即当您在一个循环中创建多个闭包时,所有闭包仅保存变量的最后状态。以这个例子varlinks=document.getElementsByTagName('a');for(varx=0;x当我的文档中有三个链接时,单击任何链接都会显示“3”,我猜是因为x在循环的最后一次运行后递增到3。我读到这个excellentintro如果你多次运行外部函数,每次都会创建一个新的闭包。那么为什么每次调用外部函数时每个闭包都不会为x保存不同的值?当您将x作为参数传递给外部函数时,它会按预期工作。varlinks=document.getEl

javascript - 等待从 javascript 函数返回直到满足条件

这是一个奇怪的问题。我有一个客户端对象,我正在使用Crockford式公共(public)/私有(private)成员构建它:varclient=function(){varthat,remote_data,other_data;//addpublicinterfacethat.doStuff=function(){...}//waitforremoteresourcestoloadremote_data=jsonRequest1();other_data=jsonRequest2();returnthat;};我遇到的问题是我需要在返回新的“that”对象(表示客户端准备就绪)之前加

javascript - 添加事件监听器,for(),索引。如何使用闭包?

这个问题在这里已经有了答案:JavaScriptclosureinsideloops–simplepracticalexample(44个答案)JavascriptinfamousLoopissue?[duplicate](5个答案)关闭9年前。我有这个代码:varitems=this.llistat.getElementsByTagName('a');for(vari=0;i事件被监听,但有3项并且警报始终在任何元素上打印3(它不考虑索引),难道items[i]不应该作为闭包来完成工作吗?谢谢!

javascript - 这是否包含 JavaScript 闭包?

在尝试学习JavaScript闭包时,我自己有点困惑。根据我在网上收集到的信息,闭包是...在另一个函数中声明一个函数,并且该内部函数可以访问其父函数的变量,即使在该父函数返回之后也是如此。这是最近项目中的一小段脚本示例。它允许div中的文本通过按钮上下滚动。varpageScroll=(function(){var$page,$next,$prev,canScroll=true,textHeight,scrollHeight;varinit=function(){$page=$('#secondary-page');//resettext$page.scrollTop(0);text

javascript - setTimeout() - 在 for 循环中随机延迟

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Javascriptclosureinsideloops-simplepracticalexample看到很多帖子都在谈论setTimeout和闭包,但我仍然无法传递一个简单的for循环计数器。for(i=0;i给予55555想要拥有01234怎么了?请不要发火,我以为我已经理解了setTimeout()的故事,但显然不是。

javascript - promise 是闭包吗?

在closuretagwikipage,它显示为“jQuery本身就是一个大闭包。”但是promise也是一个闭包吗?你能解释一下为什么或为什么不吗?我是这样理解闭包的:将一个函数赋值给一个变量,然后在不同的环境中复用它。Promise使用$.ajax()来做到这一点,但我在stackoverflow中找不到将promise作为闭包引入的任何地方。可能是因为还有$.Deferred()、resolve()和fail()等promise的其他功能来扩展其功能简单的函数传递? 最佳答案 闭包ThisishowIunderstandclo

javascript - for 循环内的闭包 - 以循环变量作为参数的回调

这个问题在这里已经有了答案:JavaScriptclosureinsideloops–simplepracticalexample(44个答案)关闭5年前。我在循环中使用jQuery“GET”从服务器获取多个结果。我想将循环索引作为固定参数包含在回调中,但它不起作用。(我遵循了thisarticle的建议如何去做。)然而,我在回调中得到的值完全不是我所期望的——而不是每个循环索引值,它总是等于索引的退出值。即。此处的代码片段会在每次执行回调时打印出“16”。我如何让它打印1、2、3...(我知道顺序可能不同,没关系)除了下面的代码之外,我还尝试了几种方法来指定回调函数,例如。函数(数据

javascript - 取消引用变量的闭包有用吗?

我不确定取消引用变量是否或何时有用(以提高性能)。varx=a.b.c.d[some_key].f;while(loop){do_something_with(x);}似乎比while(loop){do_somthing_with(a.b.c.d[some_key].f);}这是必需的还是智能JavaScript引擎自动完成的?但我真正的问题是我是否应该这样做,例如,在图书馆。(function(){varslice=Array.prototype.slice;Function.prototype.x=functionx(){varargs=slice.call(arguments,0

javascript - 这个 JavaScript 闭包函数如何重用没有全局变量的对象?

我决定在尝试理解Javascript方面向前迈出一步,然后再次阅读Javascript:TheGoodParts.第一个疑问来了:假设我想避免使用全局变量,因为它们是邪恶的,所以我有以下内容:vardigit_name=function(n){varnames=['zero','one','two','three'];returnnames[n];}D.Crockford声称这很慢,因为每次调用该函数时,都会完成一个新的names实例化。所以,然后他通过这样做转向关闭解决方案:vardigit_name=function(){varnames=['zero','one','two','

javascript - 如何使用 jquery 将可变参数传递给匿名函数?

有人能告诉我我做错了什么吗?我在下面对其进行了简化,但我基本上是在尝试创建一个列表并有一个单击事件,该事件引用仅在循环中可用的变量。for(vari=0;i 最佳答案 您没有调用外部函数。$('a:first',$newRow).click(function(j){returnfunction(){alert(j);}}(i));/*Payspecialattentiontothisline,itiswherethemajorchangeis*/作为T.J.Crowder提到,您可以将工厂移出循环。functionmy_factor