簡體   English   中英

為什么此代碼無法運行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM