簡體   English   中英

JavaScript全局變量聲明語法

[英]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及以上版本中得到支持。

演示: http//ie6test.it/?url = http://jsbin.com/usafeg/2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM