草庐IT

javascript - 自动执行函数与对象中的闭包

假设我有以下内容:varfoo=(function(){varbar=0;return{getBar:function(){returnbar;},addOne:function(){bar++;},addRandom:function(rand){bar+=rand;}}})();我有以下内容:varfoo2=function(){varbar=0;this.getBar=function(){returnbar;};this.addOne=function(){bar++;};this.addRandom=function(rand){bar+=rand;}};执行函数的唯一区别是

带有闭包的 Javascript 性能

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

javascript - 防止闭包编译器重命名某些变量

我有一个javascript文件,其中包含一个不能重命名的全局对象(来自GoogleAnalytics异步跟踪器的_gat)。当GoogleAnalytics查找具有此特定名称的变量时,GoogleClosureCompiler不得重命名该对象。我研究了提到的JavascriptDoc符号:http://code.google.com/closure/compiler/docs/js-for-compiler.html-但是,我找不到任何关于变量“保护”的信息。无论我使用简单编译还是高级编译都存在这个问题。如何确保_gat变量不被重命名? 最佳答案

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 - 闭包有什么好处,它们通常在什么时候使用?

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

php - 如何将 PHP 闭包(lambda 函数)保存到 $this->var 中并稍后从同一类的另一个方法中调用它?

我有课classSomeClass{private$someVar;publicfunctionInit($func){$this->someVar=$func;}publicfunctionDoSomething(){$this->someVar("asdasdasd");}}$obj=newSomeClass();$obj->Init(function($param){var_dump($param);});$obj->DoSomething();当我调用方法DoSomething时,我得到一个错误,提示SomeClass::someVar()是未定义的方法。但是当我使用调试器时,

php - 闭包函数 laravel 的两个参数

我有一个电子邮件发送功能:Mail::send('emails.message',['text'=>$email['message']],function($message,$email){$message->to($email['email'],'Name')->subject('Subj');});现在我有一个错误:{closure}()缺少参数2我如何将$email闪存到我的闭包函数? 最佳答案 试试这个:function($message)use($email){//...} 关

php - 如何在 PHP 的闭包中插入变量?

functionupdateParameters($landing){$addValue=function($final,$parametername,$value){$value1=str_replace('{landing}',$landing,$value);$_GET[$parametername]=$value1;return"";};doSomethingWith20Params($addValue,"");}基本上,$addValue是一个函数。参数编号不能更改。这是因为doSomethingWith20Params($addValue,"");需要一个具有3个参数的函数

php - 带有匿名函数和闭包的 cURL WRITEFUNCTION 回调

我正在为CURLOPT_WRITEFUNCTION使用cURL的选项指定当数据来自cURL请求时要处理的回调。$serverid=5;$ch=curl_init();curl_setopt($ch,CURLOPT_URL,'http://www.whatever.com');curl_setopt($ch,CURLOPT_WRITEFUNCTION,function($ch,$string){returnreadCallback($ch,$string,$serverid);});curl_exec($ch);functionreadCallback($ch,$string,$serv