![](/img/trans.png)
[英]In javascript ,Access to global variable whenever its name is same with local variable?
[英]Can I explicitly reference a JavaScript global variable that's been shadowed by a local with the same name?
我已經看到很多關於JavaScript中全局和功能范圍之間差異的帖子,這里有很多鏈接。 我也看到了關於Python的確切問題。 所以我想知道的是,當“更接近”的范圍也有一個具有相同名稱的變量時,如何訪問全局變量?
var a = "global";
function b(){
var a = "local";
var magic = ...; // somehow put "global" in magic
console.log(magic); // should print "global"
}
僅在瀏覽器中 ,我發現您可以使用window.a
來指定全局。 服務器端有什么用嗎?
如果它真的是全局的(即不只是在外部范圍內),你可以這樣做:
var magic = (function(name){return this[name]}).call(null, "a");
輸入功能代碼
當控件進入函數對象F中包含的函數代碼的執行上下文,調用者提供thisArg和調用者提供的argumentsList時,執行以下步驟:
如果函數代碼是嚴格代碼,請將ThisBinding設置為thisArg。 否則,如果thisArg為null或未定義,則將ThisBinding設置為全局對象。
請注意,您無法在jsFiddle中對此進行測試,因為全局范圍不是您定義a的位置。
示范 :
var a = "global"; function b(){ var a = "local"; var magic = (function(name){return this[name]}).call(null, "a"); document.body.textContent = 'a: '+JSON.stringify(magic); // print "global" } b();
沒有標准可以做到這一點。 出於我自己的目的,我總是將我的變量放在容器中,其名稱類似於項目名稱:
var PROJECT = {}; //將“project”的所有“全局變量”放入此容器中
這樣,我可以在一個地方收集所有變量,如果我需要傳遞“全局”,我必須通過最多一個引用。
使用您的代碼作為答案的基礎,您可以使用以下內容實際拉出“ a
”的全局版本而不是本地版本:
var a = "global";
function b(){
var a = "local";
var magic = this.a; // somehow put "global" in magic
console.log(magic); // should print "global"
}
b();
只有在上面的表單中調用b()函數時,這才有效。 這不起作用的一個例子如下:
var a = "global";
function b(){
var a = "local";
var magic = this.a; // somehow put "global" in magic
console.log(magic); // should print "global"
}
b.call({a : "other context"});
在上面的情況中, "other context"
將打印到控制台。
好吧,我沒有直接的答案,但解決方法是使用一個完善的容器,例如窗口
window['a'] = "global";
這不是一個非常干凈的解決方案,但它可以完成這項工作
您可以通過全局對象訪問全局。 在這種情況下窗口和當前上下文中的本地名稱。
這是一個小提琴的例子 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.