草庐IT

Closures

全部标签

javascript - JavaScript 闭包函数外加括号的用途

这个问题在这里已经有了答案:JavaScript-self-executinganonymousfunctionsandcallback(2个答案)关闭9年前。下面的JavaScript闭包函数的外部额外括号的目的是什么?我在其他帖子中被告知它们不是绝对必要的,但它们是一种约定,以明确传递的是函数的结果,而不是函数本身。以下引自http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html但是,冲突。哪个是正确的?Noticethe()aroundtheanonymousfunction.Thisisrequi

javascript - 在外部范围访问变量?

(function(){varx=1;return{f:function(x){alert(x);}};}()).f(2);假设我不想重命名任何一个变量。无法从f中访问首先声明的变量x-对吧? 最佳答案 正确。因为您在function(x)中有一个不同的x,所以任何访问x的尝试都会得到那个(最近的范围)。它在更广泛的范围内阻止对任何x的访问。 关于javascript-在外部范围访问变量?,我们在StackOverflow上找到一个类似的问题: https:/

javascript - 在 setTimeout 中使用 JavaScript 闭包

我正在使用setTimeout来模拟渲染,我得到了这样的结构:varRenderer=newClass({Implements:Events,initialize(){this.onRender();},onRender:function(){//somerenderingactionssetTimeout(this.onRender.bind(this),20);}});由于闭包的无限嵌套,该代码是否存在潜在的内存泄漏?还是一切正常?到目前为止,我唯一的解决方案是将其重写为通常functionRenderer(){varonRender=function(){//renderings

javascript - 为什么这个 JavaScript 映射不是无限循环?

我正在学习JavaScript。我写这段代码是为了学习map功能。但是后来我很困惑为什么这不是连续映射它,因为每个映射序列都会将一个新元素推送到数组。它不应该在映射时继续推送新元素吗?为什么map函数只对原来的三个元素运行,对新推的三个元素不运行?我尝试在节点环境中调试它,arr变量进入闭包。我知道什么是闭包,但我无法理解这里发生了什么。letarray=[1,2,3];array.map((element)=>{array.push(10);console.log(element);});我希望输出应该是1,2,3,10,10,10,10,10,10,10,10......10但实际

javascript - jQuery 闭包、循环和事件

我有一个类似于这里的问题:EventhandlersinsideaJavascriptloop-needaclosure?但我使用的是jQuery,给出的解决方案似乎是在事件被绑定(bind)而不是在点击时触发。这是我的代码:for(variinDisplayGlobals.Indicators){vardiv=d.createElement("div");div.style.width="100%";td.appendChild(div);for(varj=0;j0){varimg=d.createElement("img");jQuery(img).attr({src:Displa

Javascript - 结合还是不结合,这是个问题

好的,所以我知道为了提高效率将所有页面Javascript合并到一个外部文件中是显而易见的,但这并不是这里的问题。假设我有一个带有搜索字段的Default.htm,它附加了一点Javascript魔法。然后我有Contact.htm和一个附有一些Javascript魔法的联系表。最后,我有一个FAQ.htm,其中包含一些显示答案的jQuery面板……你明白了。基本上我有三个页面都需要“一些”javascript,但其他页面都没有使用Javascript。是将所有Javascript组合成一个加载一次然后存储在缓存中的大缩小文件更好,还是在默认页面上使用单个Javascript文件而不是

Javascript闭包-有何负面影响?

问题:闭包似乎有很多好处,但是负面因素是什么(内存泄漏,混淆问题,带宽增加?)?另外,我对闭包的理解正确吗?最后,一旦创建了关闭,是否可以销毁它们?我一直在阅读有关Java语言关闭的知识。我希望知识渊博的人会指导我的主张,纠正我的错误之处。关闭的好处:通过使用内部函数将变量封装到本地范围。函数的匿名性微不足道。我发现对本地/全局范围进行一些基本测试很有帮助:varglobal_text="";varglobal_count=0;varglobal_num1=10;varglobal_num2=20;varglobal_num3=30;functionouterFunc(){varloc

javascript - Javascript 中的闭包是获取对完整外部函数的引用,还是只获取对它们实际使用的变量的引用?

出于好奇,JavaScript中的闭包是获取对整个“外部环境”的引用,还是分析返回的函数以查看它引用了外部作用域中的哪些变量,然后仅获取对这些变量的引用? 最佳答案 理论上,JavaScript中的嵌套函数可以访问所有包含作用域中的所有变量。当遇到标识符时,它根据范围链进行解析,这是一个列表,其中包括属性为变量的对象和每个包含执行上下文(即封闭函数)的函数参数,最里面在前,加上最后的全局对象。无论走到哪里,函数对象都会拖着它的作用域链。然而,这些Variable对象和范围链只是规范构造,不能直接访问,因此实现可以自由地进行他们喜欢的

javascript - JavaScript 中的自调用函数

这些函数有什么区别?谢谢回复!函数#1varmyQuery=(function(){(...)})();函数#2varmyQuery=(function(){(...)}); 最佳答案 在第一种情况下,您自行调用一个函数文字并将调用的值分配给变量myQuery。在第二种情况下,您将引用分配给您定义的匿名函数。在这里,myQuery充当指针或对函数的引用。为了更好地说明这一点。varmyQuery=(function(){return"Hello";})();在这种情况下,myQuery包含值Hello。现在如果你有:varmyQue

javascript - 功能上的额外括号

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhatdoparenthesessurroundingaJavaScriptobject/function/classdeclarationmean?Whatdoesthis“(function(){});”,afunctioninsidebrackets,meaninjavascript?AJavascriptfunction我遇到了类似这样的标记:varsomething=(function(){//dostuffreturnstuff;})()document.ondblclick=function(