js變數宣告作用域問題

2022-05-08 10:21:10 字數 1315 閱讀 2704

1.先來看兩個題

1

var a = 1;

2foo1();

3function

foo1();67

8foo2();

9var a = 1;

10function

foo2();

首先這兩題中應該要注意的是函式宣告的提公升,也就是function foo1(){}會自動被提公升到頂部,所以foo1()的

呼叫是可以的。第乙個輸出1是毫無疑問的!那麼第二個實際上被js引擎解析為:

1

vara;

2foo();

3 a=1;

4function

foo();

所以在foo2()被執行的時候a還沒有被賦值,所以最後輸出undefined.

2.再來看看下面的例題

1//1

2var 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 原理...