我已经得到了这个,并且它有效:
myObject.myFunction = (function() {
var closure = 0;
return function(value) {
if (arguments.length) {
closure = value;
} else {
return closure;
}
}
})();
它既充当 getter 又充当 setter,因此调用 myFunction(3.14) 将设置闭包,而调用 myFunction() 将获取闭包的值。
问:我可以把它分成一个更冗长的例子(而不是荒谬的)吗?我想做的是这样的:
myObject.myFunction1 = myFunction2;
myObject.myFunction1();
function myFunction2() {
var closure = 0;
return function(value) {
if (arguments.length) {
closure = value;
} else {
return closure;
}
}
}
我只是想将 JavaScript 分解成尽可能小的 block ,以便我的学生能够集中注意力。
编辑1:
哦等等:我根本不需要 myFunction2。
最佳答案
您是否只是在寻找最简单的方法来解释闭包,例如:
function closure() {
var privateData = "I'm hidden!";
return {
get: function () {
return privateData;
},
set: function (arg) {
privateData = arg;
}
};
}
var privateDataAccess = closure();
console.log(typeof (privateData)); // logs undefined -- privateData is out of scope
console.log(privateDataAccess.get()); // logs "I'm hidden!"
privateDataAccess.set("Now you changed me!");
console.log(privateDataAccess.get()); // logs "Now you changed me!"
这可能就是我认为的那么简单:-)
关于javascript - 打破一个闭包来向外行解释它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16090745/