變數宣告提前

2022-03-28 18:37:31 字數 1091 閱讀 6295

js中只有2種作用域:全域性作用域和函式作用域,沒有塊級作用域。迴圈內定義的變數,相當於定義在迴圈所在的空間,出了迴圈仍可繼續使用。

console.log(temp);      //

不會報錯,迴圈體沒有塊級作用域,迴圈內的變數相當於直接宣告在當前**塊的最前面

for(var i=0;i<10;i++)

}

宣告提前(hoisting):在函式正式執行前,提前預讀var宣告的變數名和function宣告的函式名及函式體,並將其集中到【當前作用域】的頂部建立。變數的賦值仍等執行到所在行時執行。

函式定義時,不會讀取函式內部的內容,只有被呼叫時才會。所以閉包一定要等外部函式執行後內部函式的作用域才會被增長。

函式宣告和變數宣告一樣也會提前到函式體的最前面,同名時剛進入函式時,只有同名的函式,因為變數還未賦值。執行後再看該名字最後被賦什麼值。

變數僅僅是重複宣告不會改變原有變數的值,不產生任何影響。

function

hoisting()

function

hositing2()

//函式宣告提公升

function

test() //

不再執行函式定義,識別符號a不會重新被賦值,仍然為1

console.log(a);

}()//等同於如下

function test()

console.log(a);

a=1;

console.log(a);}//

函式宣告提前,所以識別符號是有值的

var test=5;

test();

//會報錯,開始執行時test指代函式,後面的賦值覆蓋了同名函式,呼叫會報錯。

function

test()

在函式中,形參是區域性變數,相當於在函式的第一句就var乙個變數並賦值,進入函式時就有值,函式體內和形參同名的變數宣告只是重新給形參賦值而已,並不會建立新的變數。

function

g(arg)

g(5); //

輸出10,true

變數宣告提前與函式宣告提前

變數的宣告提前 在全域性作用域中,使用var關鍵字宣告的變數會在所有的 執行之前被宣告,但是不會賦值。所以我們可以在變數宣告前使用變數。但是不使用var關鍵字宣告的變數不會被宣告提前。在函式作用域中,也具有該特性,使用var關鍵字宣告的變數會在函式所有的 執行前被宣告,如果沒有使用var關鍵字宣告變...

變數宣告提前 總結 js

js在執行時,js變數宣告語句無論出現在何處,都會先於其他 首先被執行。使用var的宣告的變數會提前。先舉個例子看看 console.log a function a var a 3 var b function console.log a 3function a b console.log a 4...

js 理解變數宣告提前

console.log a 不會出錯,會輸出undefined var a 100 console.log a 100 由於從上往下執行時遇見了var,所以實際執行順序 var a 宣告提前 console.log a undefined a 100 賦值任然留在原位置 console.log a ...