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