[英]JavaScript global variable declaration syntax
我正在編寫一個Javascript庫,希望能夠使用Closure Compiler的ADVANCED_OPTIMIZATIONS選項進行縮小。 該庫可能有二十多個全局變量,它們設置了下限和上限范圍,字符串文字等。
為了使這些變量可以從其他源文件訪問並避免死代碼刪除,我必須“導出”它們。 請參閱高級編譯和外部 。
因此,而不是使用以下語法聲明變量:
var fooMinValue = 10;
我打算使用這種語法:
window['fooMinValue'] = 10;
我測試了這個,似乎工作正常。 我的問題是,使用這種語法是否有任何缺點,並且自IE 6以來發布的所有瀏覽器都支持它嗎? (或者我應該完全使用完全不同的技術?)
雖然兩者都是全局對象的屬性,但存在差異:當您使用var
聲明變量時,其[[Configurable]]
內部屬性將設置為false
。 因此,無法使用Object.defineProperty
更改其屬性( [[Value]]
除外)。 最顯着的效果是這些變量無法delete
d:
var foo = 'bar';
window['bar'] = 'baz';
console.log(foo); // 'bar'
console.log(bar); // 'baz'
delete foo; // doesn't work, you can't delete vars
delete bar; // works, bar is an object property
console.log(foo); // 'bar'
console.log(bar); // ReferenceError
此外,在為屬性分配變量時,可以對該值進行COPY而不是引用該變量。 這意味着對屬性的外部更改不會影響變量的值。
(function() {
var foo = 'bar';
window['foo2'] = foo; //export foo
console.log(foo); // will output 'bar'
setTimeout(function() { console.log(foo) }, 1000); //will output 'bar'
})();
window['foo2'] = 'baz';
console.log(window['foo2']); // will output 'baz'
上面的代碼將產生以下輸出:
'bar'
'baz'
'bar'
它是相同的,除非你的腳本沒有在瀏覽器上運行,很可能窗口將是未定義的。
別客氣!
它會起作用; 它是完全有效的語法; 它在IE6及以上版本中得到支持。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.