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
。我认为‘严格’模式可以捕获它,但它没有。在这种情况下,这不是应该抛出一个错误吗?
发布于 2015-06-28 19:27:54
name
全局变量已经存在,与您的代码无关;它表示当前窗口的名称,因此您将赋值给一个已经存在的变量。
window.name; // the name of the current window for cross-window communication
window
上的所有内容都被声明为全局变量,因此它不会出现引用错误,因为它将赋值给外部作用域中的一个变量。
超级迷惑:D
MDN.
上的
"use strict"
将阻止定义新的全局变量,这里我们对现有变量执行赋值,将其视为name
在全局范围内,如window.Blob
,window.console
等。
https://stackoverflow.com/questions/31099180
复制相似问题