2016-11-10 70 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 –