javascript和其他語言的scope有一個很大的差異。
javascript只有function裡,才能產生scope。
一般的語言特性以java為例:
for(int i =0;i<5;i++){ //可以看到i變數 System.out.println(i); } //看不到i變數 if(true){ int i =53; //可以看到i變數 System.out.println(i); } //看不到i變數
以上這段程式碼,變數i只存在於迴圈內,當離開回圈則看不到。 javascript example: for loop
for(var i = 0;i<5;i++){ } //i值會等於5 console.log(i);
if loop
if(true){ var b = 10; } //b會等於10 console.log(b);
在function將產生一個scope:
(function(){ var a = 5; //a = 5; console.log(a); })(); //將會產生錯誤,找不到a變數 console.log(a);
以下是javascript scope參照方式:
var i=3; (function(){ //i會等於3 console.log(i); })();
當i變數無法在這個scope找到此變數時,將會往上一層去尋找。
var i=3; (function(){ //undefined console.log(i); var i=5; })();
在同一個scope已經定義了一個變數時,即使定義在印出之後,仍然會找相同scope的變數。