在JavaScript功能形成由保持(隐藏),链接到它的封闭范围内的封闭件。
是否有可能以编程方式访问它,当我们具备的功能(如变量值)时?
真正的目标是理论上的,而且演示可以列出关闭的性能。
var x = (function(){
var y = 5;
return function() {
alert(y);
};
})();
//access y here with x somehow
在JavaScript功能形成由保持(隐藏),链接到它的封闭范围内的封闭件。
是否有可能以编程方式访问它,当我们具备的功能(如变量值)时?
真正的目标是理论上的,而且演示可以列出关闭的性能。
var x = (function(){
var y = 5;
return function() {
alert(y);
};
})();
//access y here with x somehow
这是一个封闭的(一)目的(S) - 以保持信息的私密性。 由于该功能已经被执行的范围变量不再可从外部(和从来没有) - 只有执行功能在它的范围(仍然)可以访问。
然而,你可以给通过getter / setter方法访问。
你可能想看看进入司徒Langridge的谈话有关闭。 非常值得推荐也道格拉斯康乐福说明。 你可以做很多与关闭花哨的东西;)
编辑:您有几种选择来检查关闭:观看在webdeveloper控制台对象或(因为我经常这样做)返回一个调试功能,转储出所有的私有变量,以控制台。
不,不,除非你将其暴露:
var x = function(){
var y = 5;
return {
getY: function(){
return y;
},
setY: function(newY){
y = newY;
}
}
}
x.setY(4);
您可以编辑报警功能:
var x = (function(){
var y = 5;
return function() {
alert(y);
};
})();
var oldAlert = alert;
alert = function (x) {
oldAlert(x);
window.y = x;
}
x();
console.log(y); // 5
或者,如果你自己的代码,你可以使用非标准getter和setter。