Javascript 为什么此代码没有';我跑不了? (函数(){ “严格使用”; 函数初始化(){ myList=['1','2','3']; } 函数displayList(){ 变量i,n; 对于(i=0,n=myList.length;i

Javascript 为什么此代码没有';我跑不了? (函数(){ “严格使用”; 函数初始化(){ myList=['1','2','3']; } 函数displayList(){ 变量i,n; 对于(i=0,n=myList.length;i,javascript,scope,Javascript,Scope,如果不使用var,myList变量将被创建为globle变量。无论哪种方式,代码都应该正在运行。代码有什么问题 (function () { "use strict"; function initialize() { myList = ['one', 'two', 'three']; } function displayList() { var i, n; for (i = 0, n = myList.leng

如果不使用var,myList变量将被创建为globle变量。无论哪种方式,代码都应该正在运行。代码有什么问题

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

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

来自官方Mozilla-

首先,严格模式使得不可能意外地创建全局 变量。在普通JavaScript中,在赋值中错误键入变量 在全局对象上创建新属性并继续“工作” (尽管将来可能会失败:在现代JavaScript中很可能)。 会意外创建全局变量的赋值 在严格模式下抛出:

“严格使用”

mistypedvarabile=17;//抛出引用错误

-

(函数(){
“严格使用”;
var myList;
函数初始化(){
myList=['1','2','3'];
}
函数displayList(){
变量i,n;
对于(i=0,n=myList.length;i
在严格模式下,不能设置这样的全局变量

你必须这样做

(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();
})();
(函数(){
“严格使用”;
var myList;
函数初始化(){
myList=['1','2','3'];
}
函数displayList(){
变量i,n;
对于(i=0,n=myList.length;i
通过使用
“使用严格”
您将自己限制为严格模式(这是一件好事),但这意味着您不能只使用尚未设置的变量


如果要将
myList
定义为全局变量,则必须在函数启动之前执行此操作,因此在脚本顶部放置:
var myList

看到这里您得到了什么错误消息了吗?我在JSFIDLE中运行了这段代码;我没有收到任何错误消息…因为:ReferenceError:assignment to undeclared variable myList(第15行)bcz您告诉过您是严格的,但您不是:)
(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();

})();