草庐IT

Closures

全部标签

带有闭包的 Javascript 性能

varname=function(n){vardigits=['one','two','three','four'];returndigits[n];}varnamenew=(function(){digits=['one','two','three','four'];returnfunction(n){returndigits[n];}}());两个版本的输出相同,但据说第二个版本比第一个版本快得多。据我了解,第一个版本每次都会执行该函数,而第二个版本存储执行结果。这就是让我作为功能性/常规OOPS程序员感到困惑的原因。如何保存一个函数及其内部上下文?幕后发生了什么?有人可以澄清一下

javascript - 事件绑定(bind)是什么意思?

事件绑定(bind)是什么意思?每当我在互联网上搜索时,我总是会遇到这个词,无论我试图寻找什么意思,它对我来说仍然很模糊@_@前一段时间,在阅读一些关于JavaScript的博客时,我看到有人在使用这个我无法理解的神圣词。 最佳答案 事件绑定(bind)是指告诉浏览器只要发生某些“事件”就应该调用特定的函数。事件主要与用户输入有关,例如点击。在jQuery中绑定(bind)到事件的示例如下:$("#elem").bind("click",function(){alert("Clicked!");});这将一个函数绑定(bind)到标

javascript - 如何调用嵌套在 JQuery 插件中的函数?

我的目标是能够调用我的JQuery插件中的函数。正确的语法是什么?例如,这不起作用:ClickMe(function($){$.fn.foo=function(options){do_stuff=function(){console.log("helloworld!");//worksdo_other_stuff=function(){alert("whoareyou?");}}//function}//function})(jQuery);$("body").foo();$("#click_me").click(function(){$.fn.foo.do_stuff.do_othe

javascript - 是否重新编译了 javascript 中的闭包

假设我们有这段代码(暂时忘掉原型(prototype)):functionA(){varfoo=1;this.method=function(){returnfoo;}}vara=newA();每次运行函数A时,内部函数是否都重新编译?或者这样做更好(以及为什么):functionmethod=function(){returnthis.foo;}functionA(){this.foo=1;this.method=method;}vara=newA();或者javascript引擎是否足够聪明,不会每次都创建一个新的“方法”函数?特别是Google的v8和node.js。此外,欢迎就

javascript - 为什么我们在 JavaScript 中有闭包?

我正在全神贯注于JavaScript闭包,并且正处于事情进展顺利的时刻;IE闭包是函数的局部变量-在函数返回后保持事件状态,或者闭包是一个堆栈框架,在函数返回时不会被释放。我开始理解这个概念,但我理解得越多,我就越想知道为什么我们必须使用它们。像这样的例子让我理解了这个概念,但让我想问的是,有一种更简单的方法可以做到这一点!functionsayHello(name){vartext='Hello'+name;varsayAlert=function(){alert(text);}sayAlert();}sayHello('Gath');我只是想知道为什么我必须让局部变量保持事件状态?

javascript - 将范围传递给回调函数/绑定(bind)

我正在尝试将函数作用域传递给回调方法。我遇到的问题是我正在获取对象范围,这不让我可以访问原始函数中的参数和局部变量。我对“this”的理解是指当前上下文(无论是窗口还是某个对象)以及本地声明的变量和参数。[引用RichardCornford在http://jibbering.com/faq/notes/closures/上的出色工作在“执行上下文”部分]。我还知道JavaScript中的变量具有函数作用域(如果它们在函数内部声明,则只能从该函数内部访问)。基于这种理解,在一个新的环境中,我正在尝试编写一个我为我的前雇主做过很多的模式,调用一个异步方法,指定一个回调处理程序并传递我当前的

javascript - 我怎样才能让 XHR.onreadystatechange 返回它的结果?

我是JavaScript编程的新手。我现在正在开发我的GoogleChrome扩展程序。这是行不通的代码...:P我想要getURLInfo函数返回它的JSON对象,并且想把它放到resp中。有人可以修复我的代码以使其正常工作吗?functiongetURLInfo(url){varxhr=newXMLHttpRequest();xhr.open("GET","http://RESTfulAPI/info.json?url="+escape(url),true);xhr.send();xhr.onreadystatechange=function(){if(xhr.readyState

javascript - 在 javascript for 循环中使用匿名函数

我已经看到for循环中的匿名函数在一两个地方引入网络上的新范围,想知道它是否有意义。例如:varattr,colors=['green','blue','red'];for(attr=0;attr我知道这与保持for循环内的范围干净有关,但在什么情况下有必要这样做?在for循环中需要声明新变量的任何地方都这样做是一种好习惯吗? 最佳答案 2021年更新var曾经是声明变量的唯一方式。但是我们现在有const和let可以更好地解决这个问题。这些变量声明确实将循环视为要绑定(bind)的范围,这意味着以下代码片段可以正常工作,不需要匿名

javascript - 闭包有什么好处,它们通常在什么时候使用?

我是一名Web开发人员,但很多人都在寻找稍微更高级的技能,而理解闭包似乎处于最前沿。我得到了整个“执行上下文创建对永远不会被销毁的变量的引用”的事情,但实际上,这是JavaScript中的某种私有(private)或静态变量实现吗? 最佳答案 它们有很多好处,例如可见性(就像传统OO中的私有(private)成员)。varcount=function(num){returnfunction(add){add=add||1;num+=add;returnnum;}}Seeit.我的count()可以用一个数字作为种子。当我为返回分配一

javascript - 使用多个括号在 Javascript 中关闭

谁能解释一下这个函数是如何发出警报的,当没有传递更多的参数括号时。我无法清楚地理解它。functionsum(a){varsum=afunctionf(b){sum+=breturnf}f.toString=function(){returnsum}returnf}alert(sum(1)(2))//3alert(sum(5)(-1)(2))//6alert(sum(6)(-1)(-2)(-3))//0alert(sum(0)(1)(2)(3)(4)(5))//15 最佳答案 第一次调用函数时,第一个值存储在sum中。之后funct