在學習js的變數作用域時,發現的一些奇怪現象。記錄如下:
1//全域性變數:在全域性作用域下的變數2//
區域性變數:在函式內部宣告的變數3//
注意:4
//1、在函式內部沒有var宣告直接賦值的變數也是全域性變數5//
2、當變數名重複時,選擇就近原則訪問
6var num0 = 0;
7var num1 = 10;
8function
f4()
24f4();
25 console.log(num0);//
026 console.log(num1);//
1027 console.log(num2); //
error
28 console.log(num3); //
3029 console.log(num4); //
error
後來發現這是由於js的預解析處理模式導致的。
js引擎執行js分為兩步:預解析+**執行
1、預解析:js引擎會把js裡面的所有的var(變數解析)和function(函式解析)提公升到當前作用域的最前面;
2、**執行:順序執行
如:f5(); //預解析後,在函式上面也可呼叫,這在python中可不行哦。
function f5()
f5();
f6();//報錯
var f6 = function () ;
f6();
相當於:
var f6;
f6();
f6 = function () {
關於全域性變數和區域性變數
1.區域性變數能否和全域性變數重名?答 能,區域性會遮蔽全域性。要用全域性變數,需要使用 區域性變數可以與全域性變數同名,在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。對於有些編譯器而言,在同乙個函式內可以定義多個同名的區域性變數,比如在兩個迴圈體內都定義乙個同名的區域性變數...
js中的全域性變數和區域性變數
如何查詢全域性變數 最外層的函式和和最外層函式外面的變數都是全域性變數。因為函式是可以巢狀的,所以找全域性變數時,要找最外層函式 而且函式本身也是乙個變數,特殊變數,其名字就是變數名。沒有用 var宣告的變數,為全域性變數,即使位置在函式體內部 所有window物件的屬性也是全域性變數。var v ...
全域性變數和區域性變數
全域性變數 可以被不同的函式 類或檔案呼叫的變數,在函式外定義。區域性變數 只能在函式內使用,定義在函式內。區域性變數的使用 class myclass def myfun num 12 print myfun num num 正確 def myfun2 num num 1 print mufun ...