老師,有一段代碼 和EC相關(guān),但是看了有些不明白
var?a?=?1; function?foo()?{ ????if?(!a)?{ ???????var?a?=?2; ????} ????alert(a); }; foo();
我自己的理解以為是輸出1,但是實(shí)驗(yàn)發(fā)現(xiàn)是2.
是不是在變量初始化階段,foo這個(gè)函數(shù)體內(nèi)部也會(huì)進(jìn)行賦值操作。我的理解是是把初始化階段的時(shí)候是把foo存儲(chǔ)到VO中,然后foo中的代碼不會(huì)執(zhí)行。 我以為上面代碼中的foo函數(shù)體中 var a = 2 這個(gè)操作也是 在執(zhí)行階段才開始的?
2015-05-27
個(gè)人理解:
初始化階段: a:undefined foo:<ref of function>
執(zhí)行階段: a:1 foo:function(){ /*function*/};
然后function內(nèi)開始初始化,初始化后由于沒(méi)有調(diào)用,所以沒(méi)有執(zhí)行階段。
然后foo()調(diào)用,開始function內(nèi)部的執(zhí)行階段
2015-06-05
這里有兩個(gè)執(zhí)行環(huán)境,一個(gè)是全局,一個(gè)是foo函數(shù)調(diào)用時(shí)。
很明顯,foo函數(shù)調(diào)用時(shí),由于有var a,所以不管執(zhí)行與否都會(huì)被提前聲明。
所以最外全局的a實(shí)際上是被遮蔽了。
foo執(zhí)行時(shí),a因?yàn)槭莡ndefined,所以!a為真進(jìn)入完成a = 2的賦值。
2016-07-31
怎么樣判斷一個(gè)變量是全局變量,在控制臺(tái)中怎么驗(yàn)證啊