下面代碼輸出什么?
var a = 10;
(function () {
console.log(a)
a = 5
console.log(window.a)
var a = 20;
console.log(a)
})()
這里先放個占位圖遮住答案删顶,如果不能清楚的得到結(jié)果疗隶,那么請往下看
結(jié)果:依次輸出:undefined -> 10 -> 20
下面說下原理。
js代碼執(zhí)行存在兩個階段:
- 預(yù)解析
- 執(zhí)行
預(yù)解析階段翼闹,實際解析出來的js代碼如下:
var a
a = 10
(function () {
var a // var的變量默認值為undefiend
console.log(a) // undefiend
a = 5
console.log(window.a) // 取window下的a斑鼻,即全局作用域下的a,10
a = 20
console.log(a) // 20
})()