繁体   English   中英

Chrome中的var行为异常

[英]Strange behavior with var in Chrome

我在使用JavaScript的Chrome v57.0.2987.133中遇到了一些非常奇怪的行为:

这是我的代码:

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

我的感觉是,“不声明变量很可能会导致意外结果”在这里发挥了作用,并且似乎Chrome处于中间位置,根据未定义变量的其他用途,默认将未声明变量的全局范围与本地范围该程序? 有人可以确认吗?

我在Firefox中得到类似的结果。 我尝试搜索有关Firefox和Chrome中未声明变量的默认行为是什么的特定信息,除了发现潜在的奇怪行为之外,没有发现任何其他启发性的内容。

(我有点惊讶这实际上并没有破坏很多人的代码。或者也许已经破坏了。我在这里对变量的(误用)用法(未声明)是在教授全局vs.局部作用域;我不会故意忘记声明一个变量(而且无论如何都会使我的代码掉毛),所以这是我第一次注意到这种行为。)

预先感谢您的任何见解。

按顺序进行操作。

首先,由于提升,声明了变量firstNamelastNameage ,并且还声明了函数happyBirthdayLocal

然后, firstNamelastNameage都被分配了它们的值。

接下来,您调用console.log(message); 哦, message尚未定义。 在第一次真正调用happyBirthdayLocal之前,不会发生这种情况。

由于该错误是致命的,因此永远不会调用该函数,并且message仍未定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM