EML*_*EML 8 javascript closures
我是JavaScript的新手,在理解这段代码时遇到了问题:
function addProperty(o) {
var value;
o["get"] = function() { return value; }
o["set"] = function(v) { value = v; }
}
var a = {};
addProperty(a);
var b = {};
addProperty(b);
a.set(4);
b.set(5);
print("a is " + a.get() + "; b is " + b.get());
Run Code Online (Sandbox Code Playgroud)
打印(在v8/d8中)a is 4; b is 5.如果我注释掉这var value;条线,我明白了a is 5; b is 5.'价值'对象在哪里,为什么有两个?谢谢.
Way*_*ett 12
该value变量是本地的addProperty.第一次addProperty被调用,value创建一个new ,两个函数都关闭.第二次addProperty被调用,第二次value被创建,两个新函数关闭.
删除var会在所有函数共享的对象上创建全局 .valuewindow
也许你的意思是这样做:
function createPropertyMgr() {
var value;
return function(o) {
o["get"] = function() { return value; }
o["set"] = function(v) { value = v; }
}
}
var addProperty = createPropertyMgr();
Run Code Online (Sandbox Code Playgroud)
无论调用多少次,这个新addProperty功能都会关闭一个value.我不确定我是否理解用例,但这应该证明了它的不同之处.
| 归档时间: |
|
| 查看次数: |
209 次 |
| 最近记录: |