瀏覽器環境有一頂層物件window,window的屬性和var的全域性變數等價。
如果用var設定了window物件的內建屬性作為變數,內建屬性值將會被覆蓋。
如果是window物件的內建屬性,輸出預設值;非內建則輸出underfined。
console.log("window.name--"+window.name);console.log("var.name --"+name);
window.namename是window的內建屬性,返回預設值(預設為空)。
name前面不加window,作為全域性變數,它的值和window.name的值是相同的。
對二者進行判斷:
得到的結果為
可以得到結論:window的屬性和var的全域性變數是等價的
非內建屬性n:
如果用var宣告一下n:
變數n就成為window的屬性,再次驗證window的屬性和var的全域性變數是等價的。
對比現在模組化程式設計的理念,顯得格格不入。
es6以前只有全域性作用域和函式作用域,並沒有塊級作用域。
迴圈體(for...)和條件體(if...)就是塊級作用域,花括號:{} ,}}塊級作用域支援多層巢狀,一層乙個區域,每一層都是封閉的(只作用於此)。
如果在塊級區域不使用let宣告變數,就會造成變數汙染。
在es6之前,採用自我立即執行匿名函式的方式防止變數汙染。
函式作用域+自我實行,外部就無法訪問。
(function()())console.log(val); let+函式表示式
}f();{} 塊級內的函式 f() 並不處於封閉狀態,在外面依然是可以訪問的,
若不想在塊級以外區域訪問,可使用函式表示式構建函式:
}f(); //報錯
全域性作用域 函式作用域 塊級作用域的理解
作用域是任何一門程式語言中的重中之重,因為它控制著變數與引數的可見性與生命週期。很慚愧,我今天才深入理解js的作用域.我不配做乙個程式設計師.開玩笑,什麼時候理解都不晚,重要的是理解了以後能不能深深地扎在記憶裡,不能,那就寫下來在乙個 塊 括在一對花括號中的一組語句 中定義的所有變數在 塊的外部是不...
塊級作用域
跨級作用域本身沒有宣告可以說的,就需要注意兩點 1.跨級作用域內宣告的var變數並不會存在這個塊級作用域內,而是會提公升到非塊級作用域內 2.在塊級作用域內宣告function,在不同瀏覽器會有不同結果,如果是根據條件宣告function的話,請用var func function的形象 但是為什麼...
塊級作用域與函式作用域
函式作用域 變數在定義的環境中以及巢狀的子函式中處處可見 塊級作用域 變數在離開定義的塊級 後立即被 在es6之前,js的作用域只有兩種 函式作用域和全域性作用域。使用var宣告的變數,都存在變數提公升的過程。console.log a undefined console.log c undefin...