草庐IT

Closures

全部标签

Javascript 闭包

代码如下varcollection=(function(){varx=0;return{y:x,get:function(){returnx},set:function(n){x=n}}}());collection.set(1000);为什么collection.y!=collection.get()? 最佳答案 y不是x的“指针”。创建闭包时,您只需将当时x的值复制到y中,每次调用get()/set()你只对x进行操作(与y无关) 关于Javascript闭包,我们在StackOve

javascript - 澄清使用 AJAX 的 Javascript 中的闭包

我本应正确理解Javascript中的Cloure,但我显然没有...目前,我正在阅读的文本具有抽象AJAX调用的功能:functionrequest(url,callback){varxhr=newXMLHttpRequest();xhr.onreadystatechange=(function(myxhr){returnfunction(){callback(myxhr);}})(xhr);xhr.open('GET',url,true);xhr.send('');}这是我的实际问题:我的大脑拒绝理解为什么这个不起作用:functionrequest(url,callback){v

javascript - 为什么这个关闭有效?

假设我有一个提醒消息的简单函数:functioncallMessage(msg){alert(msg);}现在当我这样调用它时,它不起作用。抛出错误“heyisnotdefined”functionsayHi(){varhey="hithere"setTimeout("callMessage(hey)",1000);}sayHi();但是当我在匿名函数中调用它时它确实有效:functionsayHi(){varhey="hithere"setTimeout(function(){callMessage(hey);},1000);}sayHi();为什么“hey”变量只有在我将它放在匿名

javascript - JavaScript "for"中的奇怪事情

我正在使用jQuery,但我有一件我不明白的奇怪事情。我有一些代码:for(i=1;i“#some_button”,顾名思义-它们是一些按钮。单击时,他们应该弹出一个带有编号的框,对吗?但他们没有。如果有4个按钮,它们总是弹出“5”(按钮数+1)。为什么会这样? 最佳答案 它与JavaScript作用域有关。您可以通过添加一个函数并让该函数调用自身并传入i来引入另一个作用域,从而轻松解决这个问题:for(vari=1;i这会创建一个闭包-当内部函数可以访问调用该函数时不再存在的范围。参见thisarticle在MDC上获取更多信息。

Javascript - 命名空间与闭包之间的区别?

在Javascript中,命名空间和闭包有什么区别?他们看起来和我很相似。编辑具体来说,thisarticle讨论命名空间和闭包,并有像这样的句子Now,we’restillgoingtohavesituationswherewe’llwanttodeclarevariablesthatdon’tnaturallyfitintoanamespacedobjectstructure.Butwedon’twantthosevariablestohaveaglobalscope.Thisiswhereself-invokingfunctionscomein.它继续提供看起来很像闭包的东西,作

javascript - 这是 javascript 关闭的有效用例吗?

我已经查看了关于SO的所有其他(优秀)答案(尤其是这个:HowdoJavaScriptclosureswork?),但我希望得到您对我对这个概念的理解的反馈。我知道一个用例是隐藏私有(private)方法的实现以防止公共(public)访问。我想到的另一个是将其作为工厂生成器:functioncarFactory(make){varm=make;return{manufacture:function(model){console.log("A"+m+""+model+"hasbeencreated");}}}toyotaFactory=carFactory("toyota");hond

堆或堆栈上的 Javascript 闭包?

JavaScript(根据标准)在哪里存储闭包:堆还是栈?是否有第三个明确的闭包位置? 最佳答案 说到底就是runtime的一个实现细节。SeePhoenixlink关于实现,为了在上下文被销毁后存储局部变量,基于堆栈的实现不再适合(因为它与基于堆栈的结构的定义相矛盾)。因此,在这种情况下,父上下文的关闭数据保存在动态内存分配中(在“堆”中,即基于堆的实现),使用垃圾收集器(GC)和引用计数。这样的系统在速度上不如基于堆栈的系统有效。然而,实现可能总是优化它:在解析阶段找出函数中是否使用了自由变量,并根据此决定将数据放在堆栈或“堆”

JavaScript 'class' 和单例问题

我有一个使用另一个对象(不是单例)的单例对象,需要一些信息给服务器:varsingleton=(function(){/*_privateproperties*/varmyRequestManager=newRequestManager(params,//callbacksfunction(){previewRender(response);},function(){previewError();});/*_publicmethods*/return{/*makearequest*/previewRequest:function(request){myRequestManager.re

使用闭包在循环中创建的javascript计时器或间隔

我正在使用jQuery在一些元素上设置计时器或间隔循环,以每隔几秒检查一次。我试过设置计时器并检查是否应该重新启动它,或者设置和间隔并检查是否应该停止它。虽然简化了,但这基本上是我需要的:varmytimers=newArray();$('div.items').each(function(){myID=$(this).attr('id');mytimers[myID]=setInterval(function(){myFunction(myID)},3000)});functionmyFunction(param){alert(param);if(something()){clear

javascript - 在 javascript 的父闭包中引用 "this"

我想在Javascript中这样做:functionZ(f){f();}functionA(){this.b=function(){Z(function(){this.c()});}this.c=function(){alert('helloworld!');}}varfoo=newA();foo.b();可以这样实现:functionZ(f){f();}functionA(){varself=this;this.b=function(){Z(function(){self.c()});}this.c=function(){alert('helloworld!');}}varfoo=n