關于變量作用域
?
在函數(shù)外對一個變量有聲明 函數(shù)內也有聲明 如上圖b 則可以把函數(shù)內的聲明變量b 看作是一個新變量b1 墓卦,與這個函數(shù)外部的b就不在有任何關系了步清。通過下圖去再次體會
第一個console.info 結果為什么不是‘1’馆类?
有的人會認為明明我在外面有全局變量 b=1了,此時就是上面說的一個變量名 函數(shù)內外都有聲明那么就把函數(shù)內部的這個變量名默默在心里加上一個1 (看作是b1)與函數(shù)外的變量b予以區(qū)分罐呼;
測試下自己的理解
后面的備注一次是代碼執(zhí)行的步驟 這個如果不清楚可以自己在瀏覽器每一句加斷點然后執(zhí)行壹店,
首先第一個 console.info(a);//4 執(zhí)行的結果是3 原因很簡單首先將函數(shù)f1()中的聲明變量a看成 a1
第二個console.info(a);//7 執(zhí)行的結果是2 這是可能有得疑惑是 a的取值是85行的代碼 還是96行的代碼呢诺舔,是第85行 奉狈,沒錯卤唉!為什么呢?明明是在f1() 里調用的叭势凇桑驱? 是 f()的確是在f1() 里調用的但是在定義函數(shù)時,就已經確定了函數(shù)內部的變量的來源跛蛋,他不會根據(jù)函數(shù)被調用的位置發(fā)生改變的熬的;
或者想下 之前是不是把f1()函數(shù)里的變量a看成了a1了那f()函數(shù)中的a還和 f1()中的a1有什么關系?就好比你家的掃地機器人在地上赊级,遙控器在你手中押框,按下開關,掃地機器人內置程序是先從他在的地方向左走理逊,他是在你手上遙控器的位置走的么橡伞?不是盒揉,他是在他身體本身所在的位置開始向左走
第三個console.info(a);//9 執(zhí)行結果依然是3 這個應該沒有什么疑問,我就按了一下遙控器在回來兑徘,對我本身有什么影響么刚盈?沒有 所以結果和console.info(a);//7 是相同的
第四個console.info(a);//10 執(zhí)行結果是2 ,因為在 函數(shù) f()中沒有聲明變量 a 用到的a是來自外面聲明的全局變量var a=1; 函數(shù)f()內運算a=a+1 a=2已經改變了全局變量a的值所以執(zhí)行結果為2
第五個console.info(b);//11 執(zhí)行結果為10 函數(shù)f()內b=10 挂脑;b是未聲明變量所以瀏覽器會在外添加一個全局變量? ? var b? ; 的操作 所以b=10;