2013-05-31 211 views
4

我想修改下面的代碼,從'a'變量列出「hello world」,但不將它傳遞給函數。可能嗎?覆蓋全局變量

var a = "declared variable"; 

var fc = function() { 
    console.log(a); 
}; 

(function() { 
    var a = "hello world"; 
    fc(); 
})(); 

編輯:啊抱歉...我沒有提到。我不想修改全局變量。我只想獲得「範圍」變量值。

+0

它是否可以,如果它失去了''聲明變量「'價值? –

回答

-1

你可以這樣做。

window.a = "Hello world" 
1

只需卸下var

var a = "declared variable"; 

var fc = function() { 
    console.log(a); 
}; 

(function() { 
    a = "hello world"; 
    fc(); 
})(); 

的VAR定義在當前的範圍內可變。


作爲對編輯的反應,訪問作用域的唯一方法是在其中(或將其作爲參數傳遞)。因爲你不想傳遞它,這是我看到的唯一的其他選項。

var a = "declared variable"; 

(function() { 
    var fc = function() { 
    console.log(a); 
    }; 
    var a = "hello world"; 
    fc(); 
})(); 

或者,如果你想要通過範圍沿着這樣的結構將工作

var a = "declared variable"; 

var fc = function (scope) { 
    console.log(scope.a); 
}; 

(function() { 
    this.a = "hello world"; 
    fc(this); 
}).apply({}); 

非常技術上說這不是你一起傳遞的範圍,但如何它會完成。

+0

感謝您的回答,順便說一句,如何通過論據傳遞範圍?你能舉個例子嗎?編輯:nvm:http://stackoverflow.com/questions/6348852/javascript-pass-scope-to-another-function – user1855877

+0

非常感謝。 – user1855877

-1
var a = "declared variable"; 

var fc = function() { 
    console.log(a); 
}; 

(function() { 
    var a = "hello world"; 
    this.a = a; // assign a to global a 
    fc(); 
})(); 
+0

沒有做Op的要求。 –

0

讓我給你一個替代的答案。 千萬不要這樣做。這是一個醜陋的破解,它會更快或更快地破解,它很難調試,並會減慢你的速度。不要懶惰,繞過那個該死的價值,從長遠來看它會爲你節省大量時間。

所以我的答案是,你不能沒有經過a正常,你想要的東西實現。