dis*_*cer 16 javascript performance closures
假设我们有这段代码(暂时忘记原型):
function A(){
var foo = 1;
this.method = function(){
return foo;
}
}
var a = new A();
Run Code Online (Sandbox Code Playgroud)
是每次运行函数A时重新编译的内部函数?或者更好(以及为什么)这样做:
function method = function(){ return this.foo; }
function A(){
this.foo = 1;
this.method = method;
}
var a = new A();
Run Code Online (Sandbox Code Playgroud)
或者javascript引擎是否足够智能,不会每次都创建一个新的"方法"功能?特别是Google的v8和node.js.
此外,欢迎任何关于何时使用哪种技术的一般性建议.在我的具体示例中,使用第一个示例非常适合我,但我知道外部函数将被多次实例化.
根据我的理解,这不是一个"编译"功能的问题,因为它每次执行时都有不同的"范围".
您使用的第二种方法将始终具有method相同的范围.
第一种方法放在函数调用method的范围内A().因此,该范围内的任何信息(var foo,函数参数等)都存储在函数范围的该实例中.因此,每次都会引用相同的功能代码,但它将在不同的范围内(因此它们是不同的"对象").