(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变量应该被创建为一个全局变量。无论哪种方式,代码都应该运行。代码有什么问题??
答案 0 :(得分:7)
myList = ['one', 'two', 'three'];
在严格模式下,不允许以这种方式创建全局变量。
来自官方Mozilla documentation -
首先,严格模式使得无法意外创建全局 变量。在正常的JavaScript中错误输入赋值中的变量 在全局对象上创建一个新属性并继续“工作” (虽然未来的失败是可能的:可能,在现代JavaScript中)。 意外创建全局变量的赋值 扔严格模式:
“use strict”;
misypedVaraible = 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();
})();
答案 1 :(得分:0)
在严格模式下,您无法设置类似的全局变量。
你必须要做
(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();
})();
答案 2 :(得分:0)
使用"use strict"
你将自己限制在严格模式(这是一件好事),但这意味着你不能只使用尚未设置的变量。
如果要将myList
定义为全局变量,则必须在函数启动之前执行此操作,因此在脚本顶部放置:var myList;