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