說說js做用域

開始就來講說做用域這個蛋疼的東西。裏面可能會出現各類的問題 .先給一個簡單的例子你們猜猜結果是什麼函數

var   a="b"; function text(){ alert(a);var a="c";alert(a);} text();    結果就是  a:undefined  a:"c";  爲何第一個a 不是"b"了。這個就要說到函數做用域了。他使用的做用範圍咱們總結爲:函數裏面申明的變量是局部的,就只在函數體內部有定義。他們是局部變量,做用域是局部性的。它們只在函數體內部有定義。(注:var a="b"; function text(){ alert(c);var a="c";alert(a);} text();不如說這個你說結果又是什麼:結果就是 語法錯誤 C 沒有定義。其實我是這麼理解的:又回到上面的那句話了》函數定義的變量值在函數裏面纔有用:爲何第一個例子會是undefined了。就是js在函數執行以前會把做用域內全部用var聲明抽到頭部統一輩子成。這個確定就是undefined了。)因而咱們又會產生一個問題?爲何js沒有塊級做用域了?我舉個列子來講明一下:var a="b"; if(true){ var a="c"; alert(a); } alert(a); 我任務的答案是 a:"c"  a:"b" 但是結果是:a:"c" a:"c" 我產生疑問了這個是爲何?若是有塊級做用域,明顯if語句將建立局部變量name,並不會修改全局name,但是沒有這樣,因此Js沒有塊級做用域。function test(flag){ if(flag){ var a="a"; for(var i=0;i<2;i++) ; } alert(i); alert(a);} test(true);結果:2 "a"  這個應該很好理解吧。如今咱們在看看這個例子。function test(flag){ if(flag){  a="a"; for(var i=0;i<2;i++) ; } alert(i);} test(true);alert(a) 答案是什麼了。按照咱們上面的理解 :應該是  i:"2",a is not defined  爲何是  2 a  去掉了var  他會自動升級爲全局變量。下面咱們遺留一個問題  function test(flag){ if(flag){  var a="a"; for(var i=0;i<2;i++) ; } alert(i);} test(true);alert(a)  答案又是什麼啊??下面這個例子又是什麼了???  alert(a);function test(flag){ if(flag){  var a="a"; for(var i=0;i<2;i++) ; } alert(i);} test(true); spa

相關文章
相關標籤/搜索