是否有可能获得closuresfunction?

JavaScript中的一个函数通过保持(隐藏)链接到其封闭范围来形成闭包。

当我们有函数(作为variables值)时,是否有可能以编程方式访问它?

真正的目标是理论上的,但是可以列举闭包的属性。

var x = (function(){ var y = 5; return function() { alert(y); }; })(); //access y here with x somehow 

这是closures的目的之一 – 保持信息的私密性。 由于函数已经被执行,它的范围variables不再可以从外部获得(并且从来没有) – 只有在它的范围(仍然)中执行的函数才能访问。

不过你可以通过getter / setter来访问。

你可能想看看斯图尔特·兰格里奇关于闭包的讨论 。 非常值得推荐的还有Douglas Crockfords解释。 你可以用闭包做很多花哨的东西;)

编辑:你有几个选项来检查闭包:观察webdeveloper控制台中的对象或(我经常这样做)返回一个debuggingfunction,将所有的私有variables转储到控制台。

不,除非你揭露它:

 var x = function(){ var y = 5; return { getY: function(){ return y; }, setY: function(newY){ y = newY; } } } x.setY(4); 

您可以编辑警报function:

 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。