Подтвердить что ты не робот

JavaScript "строгий режим" работает не так, как ожидалось?

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. Я думал, что "строгий" режим поймает его, но это не так. Разве это не должно вызывать ошибку в этом случае?

4b9b3361

Ответ 1

A name глобальная переменная уже существует, не связанная с вашим кодом; он представляет имя текущего окна, поэтому вы назначаете уже существующую переменную.

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

Все в window объявлено как глобальное - поэтому оно не является ссылкой-ошибкой, поскольку оно присваивает переменной во внешней области.

Супер запутанное: D


"use strict" будет препятствовать определению новых глобальных переменных, здесь мы выполняем назначение существующей переменной, думаем об этом, поскольку name находится в глобальной области видимости, например window.Blob, window.console и т.д.