JavaScript';严格模式';没有按预期工作?
在上面的代码中,我犯了一个错误,声明变量JavaScript';严格模式';没有按预期工作?,javascript,strict,Javascript,Strict,在上面的代码中,我犯了一个错误,声明变量names,并使用name。我以为“严格”模式会抓住它,但它没有。在这种情况下,这不应该引发错误吗 Aname全局变量已存在,与您的代码无关;它表示当前窗口的名称,因此您正在分配给已存在的变量 var test = function() { 'use strict'; var mapNames = { 'name': 'City Name:', 'coord.lat': 'Latitute:' }
names
,并使用name
。我以为“严格”模式会抓住它,但它没有。在这种情况下,这不应该引发错误吗 Aname
全局变量已存在,与您的代码无关;它表示当前窗口的名称,因此您正在分配给已存在的变量
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();
窗口
上的所有内容都声明为全局-因此它不是引用错误,因为它是分配给外部范围中的变量的
超级混乱:D
- 关于MDN
“use strict”
会阻止定义新的全局变量,这里我们对现有变量执行赋值,将其视为名称
在全局范围内,如窗口.Blob
,窗口.console
等。不应该使用strict”
完全阻止吗?@JanDvorak“严格使用“
会阻止定义新的全局变量,在这里我们对现有变量执行赋值,将其视为name
在全局范围内,如window.Blob
,window.console
等。@KarolyHorvath重点是,即使不定义名为name
的变量,浏览器在全局范围内为您执行此操作。还请注意,严格模式在节点中捕捉到的错误很好(因为没有“窗口”)。@georg yes,在宿主对象未定义名称
属性的任何环境中,严格模式错误(应该如此)。
window.name; // the name of the current window for cross-window communication