var arg = 1;
function funcTest() {
alert(arg);
var arg = 2;
}
arg = 10;
funcTest();javascript
在執行funcTest函數時,也即進入了funcTest對應的做用域,js引擎在執行時,當遇到對變量名或者函數名的使用時,會首先在當前做用域(也即funcTest對應的做用域)查找變量或者函數(顯然,arg變量在funcTest對應的做用域裏被定義爲var arg=2 因此alert方法的參數採用的是當前做用域的arg,可是由於arg被定義在alert方法後,因此arg變量默認值爲undefined)。固然,若是沒有找到就到上層做用域查找,依此類推(做用域範圍能夠持續到javascript運行環境的根:window對象)。
最後,讓你看的更清楚,上面的代碼其實能夠等價於:java
var arg = 1;
function funcTest() {
var arg; //默認值undefined
alert(arg);
arg = 2;
}
arg = 10;
funcTest();函數