【问题标题】:why this code doesn't run?为什么这段代码不运行?
【发布时间】:2023-03-18 15:43:01
【问题描述】:
(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 变量将被创建为全局变量。无论哪种方式,代码都应该运行。代码有什么问题??

【问题讨论】:

标签: javascript scope


【解决方案1】:
myList = ['one', 'two', 'three'];

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

来自Mozilla官方documentation -

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

“使用严格”;

错误输入变量 = 17; // 抛出一个引用错误

This works -

(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】:

    在严格模式下你不能设置这样的全局变量。

    你必须这样做

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

    【讨论】:

      【解决方案3】:

      通过使用"use strict",您将自己限制为严格模式(这是一件好事),但这意味着您不能只使用尚未设置的变量。

      如果你想将myList定义为一个全局变量,你必须在函数开始之前做,所以在脚本的顶部放置:var myList;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-31
        • 2021-05-05
        • 1970-01-01
        • 2019-10-27
        • 1970-01-01
        • 1970-01-01
        • 2014-09-14
        相关资源
        最近更新 更多