为什么这段代码没有运行?

Jos*_*hua 2 javascript scope

(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();

})();
Run Code Online (Sandbox Code Playgroud)

如果不使用var,myList变量应该被创建为一个全局变量.无论哪种方式,代码都应该运行.代码有什么问题?

MD *_*med 7

myList = ['one', 'two', 'three'];
Run Code Online (Sandbox Code Playgroud)

在严格模式下,不允许以这种方式创建全局变量.

从官方Mozilla 文档 -

首先,严格模式使得不可能意外地创建全局变量.在正常的JavaScript错误输入中,赋值中的变量会在全局对象上创建一个新属性并继续"工作"(尽管未来可能会失败:可能在现代JavaScript中).意外创建全局变量的赋值将以严格模式抛出:

"严格使用";

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();
})();
Run Code Online (Sandbox Code Playgroud)