[英]Javascript Odd Scoping Behavior
我一直在研究Javascript函數范圍,並遇到了這個問題:
var scope = "global";
function f(){
console.log(scope);
var scope = "local";
console.log(scope);
}
f();
現在,我知道第一個日志的輸出是“未定義”的,因為js如何在函數頂部提升變量。 但是,當我從“ var scope =“ local”;“中刪除var時 第一個日志輸出“ global”,這讓我抓狂了。 有人可以解釋為什么會這樣嗎? 我的意思是js不按順序運行代碼嗎? 這樣,如何刪除VAR會對第一個日志產生任何影響?
兩遍解析。 該代碼將被視為
function f() {
var scope; // var created, but no value assigned. this overrides the earlier global
console.log(scope);
scope = 'local';
console.log(scope);
}
var的CREATION將被執行,就好像它是函數中執行的代碼的第一位一樣。 但是,實際的分配操作要到正常情況下才會發生。
JavaScript有時的行為與其他語言有些不同。 看看http://www.adequatelygoodgood.com/JavaScript-Scoping-and-Hoisting.html ,他們對此做了一些解釋。
如果省略var語句,則第一個日志使用全局變量,該變量由字符串“ global”設置。 沒有其他局部變量,也沒有提升。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.