有沒有人試過或知道如何獲得匿名函數中的變量?Javascript IIFE - 後門?
例
var test = "Hi";
(function() {
var test = "Bye";
// Outputs "Bye"
console.log(test);
})();
// Outputs "Hi"
console.log(test);
正如你可以看到過去數收益「嗨」,但我想「再見」任何人都知道的方式在這個例子中獲取價值「再見」?
有沒有人試過或知道如何獲得匿名函數中的變量?Javascript IIFE - 後門?
例
var test = "Hi";
(function() {
var test = "Bye";
// Outputs "Bye"
console.log(test);
})();
// Outputs "Hi"
console.log(test);
正如你可以看到過去數收益「嗨」,但我想「再見」任何人都知道的方式在這個例子中獲取價值「再見」?
要做到這一點的唯一方法是不重新創建匿名函數範圍內的變量。
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);
我假設我無法修改函數。 – FullStackYeah
然後,你不能訪問任何變量與本地範圍內聲明(當使用'var') – Archer
運行函數創建一個範圍;在此範圍內定義「再見」;並且這個範圍從功能外部是不可見的。
如果您有權訪問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);
從這些案例
之外,沒有什麼可以做;通過設計。即使是功能代碼顯示的跨源限制,也是爲了防止您訪問不屬於您的代碼。聰明的人已經想到了這一點;我懷疑存在後門。
Yuup我知道但我試試找回門做:) – FullStackYeah
@FullStackYeah MITM –
擺脫'var' – epascarello
你不能沒有全局或回調,這是整個點。另請參閱http://stackoverflow.com/questions/14373475/ –