JavaScript 'strict mode' 没有按预期工作?

JavaScript 'strict mode' not working as expected?

var test = function() {

    'use strict';

    var mapNames = {
        'name': 'City Name:',
        'coord.lat': 'Latitute:'
    };  

    for (var key in mapNames) {

        var names;

        if (mapNames[key]) {
            name = mapNames[key];
        } else {
            name = key;
        }
    }

    console.log(name);

}

test();

在上面的代码中,我错误地声明了变量 names 并改用了 name。我以为 'strict' 模式会捕捉到它,但它没有。在这种情况下,这不应该引发错误吗?

一个name全局变量已经存在,与你的代码无关;它代表当前 window 的名称,因此您正在分配给一个已经存在的变量。

window.name; // the name of the current window for cross-window communication

window 上的所有内容都被声明为全局变量 - 因此它不是引用错误,因为它正在分配给外部范围中的变量。

超级混乱:D


"use strict" 会阻止定义新的全局变量,这里我们正在执行对现有变量的赋值,将其视为 name 在全局范围内,如 window.Blobwindow.console 等等。