[英]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.局部作用域;我不會故意忘記聲明一個變量(而且無論如何都會使我的代碼掉毛),所以這是我第一次注意到這種行為。)
預先感謝您的任何見解。
按順序進行操作。
首先,由於提升,聲明了變量firstName
, lastName
, age
,並且還聲明了函數happyBirthdayLocal
。
然后, firstName
, lastName
, age
都被分配了它們的值。
接下來,您調用console.log(message);
。 哦, message
尚未定義。 在第一次真正調用happyBirthdayLocal
之前,不會發生這種情況。
由於該錯誤是致命的,因此永遠不會調用該函數,並且message
仍未定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.