Javascript绑定行为
我有两个javascript文件,看起来像:Javascript绑定行为,javascript,Javascript,我有两个javascript文件,看起来像: // module1.js var globalFunction = function(val1, val2, callback){ var localVariable1 = val1; var localVariable2 = val2; someAsyncFunction(function(){ callback(localVariable1, localVariable2 ); }); } mo
// module1.js
var globalFunction = function(val1, val2, callback){
var localVariable1 = val1;
var localVariable2 = val2;
someAsyncFunction(function(){
callback(localVariable1, localVariable2 );
});
}
module.exports = function(val1, val2, callback){
var localVariable1 = val1;
var localVariabl2 = val2;
anotherAsyncFunction( function(){
globalFunction(localVariable1, localVariable2, callback);
});
}
这是:
function MyClass(val1, val2){
this._val1 = val1;
this._val2 = val2;
this._boundFunc = require("./module1.js").bind(this);
}
MyClass.prototype.doSomething = function(callback){
this._boundFunc(callback);
}
现在,这个令人难以置信的改进示例将module.exports绑定到类MyClass。引擎盖下面发生了什么?每个MyClass实例是否都有自己的module.exports函数副本,以及在module.exports中引用的globalFunction副本
我担心的是,如果在MyClass的两个不同实例上同步调用多个“doSomething”函数,那么它们可能会在等待异步函数回调时干扰并覆盖彼此的局部变量。如果绑定同时复制了globalFunction和module.exports,那么我认为我没有问题。谢谢
我担心的是,如果调用多个函数,它们可能会干扰并覆盖其他局部变量
不,这永远不会发生。每个函数中的局部变量(var
s,参数)是为每个函数调用独立创建的。即使调用同一个函数两次,它也会生成两组不相关的局部变量。分配第一次调用中的一个变量不会更改第二次调用中同名的变量
当然,调用会显式共享一个可变值,即类的对象或实例。如果您更改了它的一个属性,并且两个函数调用都在同一个对象上工作,那么它们确实会产生干扰。在您的示例中,MyClass
实例的带下划线的属性没有在任何地方使用。
每个MyClass实例是否都有自己的module.exports函数副本
不,没有。module1.js中的代码只运行一次,它的module.export是“缓存”的,因此无论何时需要('./module1')
都会得到该对象的相同实例
它们可以相互干扰并覆盖局部变量
不,他们不能。每次调用函数时都会重新创建这些变量,因此对函数的每次调用都有自己的局部变量,并且不会相互干扰关于
这一点。\u boundFunc(回调)代码>-导出的函数需要3个参数,而不仅仅是一个。“现在,这个令人难以置信的设计示例绑定了模块。导出”-为什么要这样做?导出的函数是一个普通函数,它甚至不使用this
关键字。您似乎想绑定“this”上下文,但在所需函数中不以任何方式使用“this”?!