簡體   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