JavaScript:从外部访问匿名函数内的变量

ste*_*eve 17 javascript scope anonymous-function

说我有这个匿名功能:

(function(window){

 var private = 'private msg';

 function sayit() {
   alert(private) // works
 }

 document.body.onclick = sayit; // works

})(window);

// private shouldn't be accessible here
Run Code Online (Sandbox Code Playgroud)

这是JavaScript应该如何表现?

也就是说,无法private从该匿名函数之外的任何地方访问?

如果是这样,是否有可能private从外部找到某种黑客攻击,让代码保持原样?

Fai*_*aiz 13

是的,这就是Javascript让你拥有'私有'变量(隐藏在函数范围内)的方式.

不,没有黑客可以访问变量,例如private没有重写代码.

var在函数内定义的变量只能从该函数中访问.


San*_* Yu 8

好.我知道了.

(function(window){
    var alert_original = window.alert;
    window.alert = function(data) {
        window.extracted = data;
        alert_original(data);
    };
})(window);

(function(window){
    var private = 'private msg';
    function sayit() {
    alert(private) // works
 }
 document.body.onclick = sayit; // works
})(window);
Run Code Online (Sandbox Code Playgroud)

单击body后,您可以从中获取"private msg" extracted