2016-11-10 89 views
-2

有没有人试过或知道如何获得匿名函数中的变量?Javascript IIFE - 后门?

var test = "Hi"; 

(function() { 
    var test = "Bye"; 

    // Outputs "Bye" 
    console.log(test); 
})(); 

// Outputs "Hi" 
console.log(test); 

正如你可以看到过去数收益“嗨”,但我想“再见”任何人都知道的方式在这个例子中获取价值“再见”?

+1

摆脱'var' – epascarello

+3

你不能没有全局或回调,这是整个点。另请参阅http://stackoverflow.com/questions/14373475/ –

回答

0

要做到这一点的唯一方法是不重新创建匿名函数范围内的变量。

var test = "Hi"; 
 

 
(function() { 
 
    test = "Bye"; // notice no "var", meaning it uses the existing variable 
 

 
    // Outputs "Bye" 
 
    console.log(test); 
 
})(); 
 

 
// Outputs "Bye" 
 
console.log(test);

+0

我假设我无法修改函数。 – FullStackYeah

+0

然后,你不能访问任何变量与本地范围内声明(当使用'var') – Archer

2

运行函数创建一个范围;在此范围内定义“再见”;并且这个范围从功能外部是不可见的。

如果您有权访问IIFE,那么您可以对其进行修改,以便将此变量导出到外部范围。

如果IIFE是在同一个跨域比你的代码命名函数里面,可以显示外部函数:

var toto = function() { 
    var test = "Hi"; 

    (function() { 
     var test = "Bye"; 

     // Outputs "Bye" 
     console.log(test); 
    })(); 

    // Outputs "Hi" 
    console.log(test);  
} 

console.log(toto); 
从这些案例

之外,没有什么可以做;通过设计。即使是功能代码显示的跨源限制,也是为了防止您访问不属于您的代码。聪明的人已经想到了这一点;我怀疑存在后门。

+0

Yuup我知道但我试试找回门做:) – FullStackYeah

+0

@FullStackYeah MITM –