js中做用域鏈的問題

爲何沒有var聲明的變量是全局的?

是由於,在js中,若是某個變量沒有var聲明,會自動到上一層做用域中去找這個變量的聲明語句,若是找到,就使用,若是沒有找到,繼續向上查找,一直查找到全局做用域爲止,若是全局中仍然沒有這個變量的聲明語句,那麼會自動在全局做用域進行聲明,這個就是js中的做用域鏈閉包

 

<script> var i = 10; function f1() {  //第一層 i = 20; function f2() {  //第二層 i = 30; function f3() {  //第三層 i = 40; } f3(); } f2(); } f1(); alert(i); //40 </script>

 這裏  咱們在每一層函數後面都進行了調用,f3調用,由於f3函數裏面的i沒有使用var聲明,因此,會向上一層f2找,發現也沒有聲明,繼續找f1,而後找到全局變量i,因此,就直接修改了i的值爲40函數

下面是另外一種狀況,當這三層函數中,任意一層中有聲明  ispa

這就是js的做用域鏈。code

 

 

局部訪問全局使用做用域鏈     (內部訪問外部的變量就是經過做用域鏈)blog

全局訪問局部能夠使用閉包進行模擬ip

相關文章
相關標籤/搜索