是否有可能访问的功能关闭?是否有可能访问的功能关闭?(Is it possible to gain

2019-06-12 06:47发布

在JavaScript功能形成由保持(隐藏),链接到它的封闭范围内的封闭件。

是否有可能以编程方式访问它,当我们具备的功能(如变量值)时?

真正的目标是理论上的,而且演示可以列出关闭的性能。

var x = (function(){
   var y = 5;
   return function() {
       alert(y);
   };
})();

//access y here with x somehow

Answer 1:

这是一个封闭的(一)目的(S) - 以保持信息的私密性。 由于该功能已经被执行的范围变量不再可从外部(和从来没有) - 只有执行功能在它的范围(仍然)可以访问。

然而,你可以给通过getter / setter方法访问。

你可能想看看进入司徒Langridge的谈话有关闭。 非常值得推荐也道格拉斯康乐福说明。 你可以做很多与关闭花哨的东西;)

编辑:您有几种选择来检查关闭:观看在webdeveloper控制台对象或(因为我经常这样做)返回一个调试功能,转储出所有的私有变量,以控制台。



Answer 2:

不,不,除非你将其暴露:

var x = function(){
        var y = 5;

        return {             
           getY: function(){
              return y;
          },
          setY: function(newY){
             y = newY;
          }    
       }
   }


    x.setY(4);


Answer 3:

您可以编辑报警功能:

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。



文章来源: Is it possible to gain access to the closure of a function?