[英]why this code doesn't run?
(function () {
"use strict";
function initialize() {
myList = ['one', 'two', 'three'];
}
function displayList() {
var i, n;
for (i = 0, n = myList.length; i < n; i += 1) {
alert(myList[i]);
}
}
initialize();
displayList();
})();
如果不使用var,則myList變量將被創建為全局變量。 無論哪種方式,代碼都應該正在運行。 代碼有什么問題??
myList = ['one', 'two', 'three'];
在嚴格模式下,不允許您以這種方式創建全局變量。
來自Mozilla官方文檔 -
首先,嚴格模式使得不可能意外地創建全局變量。 在正常的JavaScript錯誤輸入中,賦值中的變量會在全局對象上創建一個新屬性並繼續“工作”(盡管未來可能會失敗:可能在現代JavaScript中)。 會意外創建全局變量的賦值會改為以嚴格模式拋出:
“嚴格使用”;
mistypedVaraible = 17; //引發ReferenceError
這工作 -
(function () {
"use strict";
var myList;
function initialize() {
myList = ['one', 'two', 'three'];
}
function displayList() {
var i, n;
for (i = 0, n = myList.length; i < n; i += 1) {
alert(myList[i]);
}
}
initialize();
displayList();
})();
在嚴格模式下,您無法設置類似的全局變量。
你必須這樣做
(function () {
"use strict";
var myList;
function initialize() {
myList = ['one', 'two', 'three'];
}
function displayList() {
var i, n;
for (i = 0, n = myList.length; i < n; i += 1) {
alert(myList[i]);
}
}
initialize();
displayList();
})();
通過使用"use strict"
您將自己限制為嚴格模式(這是一件好事),但這意味着您不能只使用尚未設置的變量。
如果要將myList
定義為全局變量,則必須在函數啟動之前執行此操作,因此在腳本頂部放置: var myList;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.