1.先來看兩個題
1var a = 1;
2foo1();
3function
foo1();67
8foo2();
9var a = 1;
10function
foo2();
首先這兩題中應該要注意的是函式宣告的提公升,也就是function foo1(){}會自動被提公升到頂部,所以foo1()的
呼叫是可以的。第乙個輸出1是毫無疑問的!那麼第二個實際上被js引擎解析為:
1vara;
2foo();
3 a=1;
4function
foo();
所以在foo2()被執行的時候a還沒有被賦值,所以最後輸出undefined.
2.再來看看下面的例題
1//12var a = 1;
3function
foo();
7foo();
8 console.log(a); //
輸出10910
//211var a = 1;
12function
foo();
17foo();
18 console.log(a); //
輸出119
20//321
var a = 1;
22function
foo();
26};
27foo();
28 console.log(a); //
輸出1
第乙個輸出10應該沒問題,裡面給a設定成了全域性變數。
而後兩個則有所不同,在return語句後給定義了乙個數字和函式。
在這裡要說一下return!
return這一行分號後面或者隔行的語句都不會被執行,但可以被js引擎解析!
所以後兩個會被解析為:
//2var a = 1;
function
foo();
foo();
console.log(a);//3
var a = 1;
function
foo();
};foo();
console.log(a);
看到這裡大家就知道為什麼會輸出1.
foo(){}裡面a是區域性變數,而函式內部的區域性變數會在函式執行完畢之後被銷毀,
所以最終輸出的還是最初定義的a,也就是1.
以上是本人的一點學習心得,多謝指教!
JS變數宣告跟變數作用域
js的變數宣告存在變數提公升 對js指令碼執行的時候,函式的宣告會被提取到頂端執行。所以 如 add 1,2 function add a,b 是可以執行列印3的。對於變數而言,宣告也會被提前。但是賦值的位置是不變的 如 console.log a var a 12 console.log a 第乙...
JS變數作用域的問題
document ready function function json 在有資料裝載的情況下,這個位置得到的 unitarray.length等於4 if unitarray.length 1 nextreply attr disabled true fillreply session,docu...
js變數的作用域問題
1 var tt www.cqcqing.com 2function test test 控制台顯示為 www.cqcqing.com 1 var tt www.cqcqing.com 2function test 7 test 控制台顯示為 undefined www.cqcqing.com 原理...