//if裡面的變數提公升,導致內層的tmp變數覆蓋了外層的tmp變數,console是在賦值前執行,導致輸出undefined
//不管判斷語句是否執行,在預解析的時候都會提前變數的宣告
var tmp =
newdate()
;functionf(
)}f(
);// undefined
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
--//變數i只用來控制迴圈,但是迴圈結束後,它並沒有消失,洩露成了全域性變數
var s =
'hello'
;for
(var i =
0; i < s.length; i++
)console.
log(i)
;// 5
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
--//在塊級作用域內宣告函式相當於var乙個變數,會提公升宣告和作用域
//如果把判斷語句刪除,會輸出i am outside!
functionf(
)(function()
}f()
;// uncaught typeerror: f is not a function}(
));
塊級作用域
跨級作用域本身沒有宣告可以說的,就需要注意兩點 1.跨級作用域內宣告的var變數並不會存在這個塊級作用域內,而是會提公升到非塊級作用域內 2.在塊級作用域內宣告function,在不同瀏覽器會有不同結果,如果是根據條件宣告function的話,請用var func function的形象 但是為什麼...
全域性作用域 塊級作用域
瀏覽器環境有一頂層物件window,window的屬性和var的全域性變數等價。如果用var設定了window物件的內建屬性作為變數,內建屬性值將會被覆蓋。如果是window物件的內建屬性,輸出預設值 非內建則輸出underfined。console.log window.name window.n...
js塊級作用域
首先看乙個常見的函式,該函式輸出的是什麼呢?對的,就是5個6.為什麼會這樣呢?因為settimeout是個非同步函式,每次迴圈的時候都會建立乙個定時器,任務放到佇列裡,等主線程執行完才會執行定時器,這個時候迴圈跑完了,最後一次的 i 5 1 6,所以輸出5個6.for var i 1 i 5 i 1...