Chrome 中 var 的奇怪行为
Strange behavior with var in Chrome
我在 Chrome v57.0.2987.133 中使用 JavaScript:
时出现一些非常奇怪的行为
这是我的代码:
var firstName = "Bob";
var lastName = "Smith";
var age = 29;
function happyBirthdayLocal(first, last, a) {
a = a + 1;
message = "Happy Birthday to " + first + " " +
last + " who just turned " + a;
console.log(message);
}
happyBirthdayLocal(firstName, lastName, age);
不出所料,因为我在函数中没有在message
前面使用var
,所以message
就像一个全局变量,我可以访问window.message
在开发者控制台中。
但是,如果我在函数调用上方插入一行访问 message
,如下所示:
var firstName = "Bob";
var lastName = "Smith";
var age = 29;
function happyBirthdayLocal(first, last, a) {
a = a + 1;
message = "Happy Birthday to " + first + " " +
last + " who just turned " + a;
console.log(message);
}
console.log(message);
happyBirthdayLocal(firstName, lastName, age);
(没有其他更改!)现在,我收到未捕获的引用错误,并且不再定义 window.message
。
我的感觉是 "failing to declare variables will very likely lead to unexpected results" 在这里发挥作用,似乎 Chrome 在默认为全局与本地范围的未声明变量取决于其他用途方面处于中间位置在程序中?谁能证实这一点?
我在 Firefox 中得到类似的结果。我已经尝试搜索有关 Firefox 和 Chrome 中未声明变量的默认行为的具体信息,但除了可能会出现奇怪的行为外,没有发现任何更有启发性的信息。
(我有点惊讶这实际上并没有破坏一堆人的代码。或者也许它已经。我在这里(错误)使用变量——没有声明它——是在教授全局与局部范围;我不会故意忘记声明一个变量(并且无论如何都会检查我的代码)所以这是我第一次注意到这种行为。)
提前感谢您的任何见解。
按顺序逐步完成。
首先,由于吊装,声明了变量firstName
、lastName
、age
,同时声明了函数happyBirthdayLocal
然后,firstName
、lastName
、age
都被赋值了。
接下来你打电话给 console.log(message);
。呃,message
尚未定义。直到第一次实际调用 happyBirthdayLocal
才会发生这种情况,这将在下一行。
由于致命错误,该函数从未被调用,message
仍未定义。
我在 Chrome v57.0.2987.133 中使用 JavaScript:
时出现一些非常奇怪的行为这是我的代码:
var firstName = "Bob";
var lastName = "Smith";
var age = 29;
function happyBirthdayLocal(first, last, a) {
a = a + 1;
message = "Happy Birthday to " + first + " " +
last + " who just turned " + a;
console.log(message);
}
happyBirthdayLocal(firstName, lastName, age);
不出所料,因为我在函数中没有在message
前面使用var
,所以message
就像一个全局变量,我可以访问window.message
在开发者控制台中。
但是,如果我在函数调用上方插入一行访问 message
,如下所示:
var firstName = "Bob";
var lastName = "Smith";
var age = 29;
function happyBirthdayLocal(first, last, a) {
a = a + 1;
message = "Happy Birthday to " + first + " " +
last + " who just turned " + a;
console.log(message);
}
console.log(message);
happyBirthdayLocal(firstName, lastName, age);
(没有其他更改!)现在,我收到未捕获的引用错误,并且不再定义 window.message
。
我的感觉是 "failing to declare variables will very likely lead to unexpected results" 在这里发挥作用,似乎 Chrome 在默认为全局与本地范围的未声明变量取决于其他用途方面处于中间位置在程序中?谁能证实这一点?
我在 Firefox 中得到类似的结果。我已经尝试搜索有关 Firefox 和 Chrome 中未声明变量的默认行为的具体信息,但除了可能会出现奇怪的行为外,没有发现任何更有启发性的信息。
(我有点惊讶这实际上并没有破坏一堆人的代码。或者也许它已经。我在这里(错误)使用变量——没有声明它——是在教授全局与局部范围;我不会故意忘记声明一个变量(并且无论如何都会检查我的代码)所以这是我第一次注意到这种行为。)
提前感谢您的任何见解。
按顺序逐步完成。
首先,由于吊装,声明了变量firstName
、lastName
、age
,同时声明了函数happyBirthdayLocal
然后,firstName
、lastName
、age
都被赋值了。
接下来你打电话给 console.log(message);
。呃,message
尚未定义。直到第一次实际调用 happyBirthdayLocal
才会发生这种情况,这将在下一行。
由于致命错误,该函数从未被调用,message
仍未定义。