變數提公升和函式提公升

2022-09-04 01:42:07 字數 1594 閱讀 2373

首先js引擎在讀取js**時會進行兩個步驟,第乙個步驟是解釋,第二個步驟是執行。 

所謂解釋就是會先通篇掃瞄所有的js**,然後把所有宣告提公升到頂端,第二步是執行,執行就是操作一類的。

例子1:

console.log(a);//輸出結果 undefined

var a=10;

script>

以上**輸出 undefined 

原因: 變數提公升(把變數宣告提公升到當前執行環境的最頂端) 

上段**相當於: 

var a; 

console.log(a);//由於未賦值 所以輸出undefined 

a=10;

例2:

foo();

function foo()

結果輸出: aaa 

原理:函式宣告提公升 (函式宣告提公升直接把整個函式提到執行環境的最頂端)

相當於:

function foo()

foo();

變數提公升只提公升函式名 而函式提公升會提公升整個函式題 注意:函式提公升在變數提公升上面。

例3:

foo();

var foo = function()

執行結果是: foo is not a function

原因: 還是進行了變數提公升 

相當於:

var foo;

console.log(foo); //undefined

foo(); //foo is not a function

foo = function()

上面**輸出undefined 是因為變數提公升後並沒有賦值因此輸出undefined

輸出foo is not a function 原因是:js解析遇到 foo()時會預設當做函式來解析

例4:

console.log(foo);

var foo=10;

console.log(foo);

function foo()

console.log(foo);

輸出結果: 

原理: 

相當於:

function foo()

var foo;

注意: 函式提公升在變數提公升上面,第乙個console.log(foo);為什麼會輸出函式題呢,原因在於 var foo; 並未有賦值只是宣告,因此他會呼叫上面的值

例如:

var b=10;

b=10;

console.log(b); //10 輸出上乙個值不會輸出undefined

但是更改後:

var b=10;

b=20;

console.log(b); //20 輸出20不是上乙個值

**:

變數提公升和函式提公升

1.變數宣告提公升 通過var 定義 宣告 的變數,在定義語句之前就可以訪問到。值 undefined console.log a undefined var a 23 console.log a 23上面 等價於 var a 預編譯,將變數宣告提公升至當前作用域的頂端,初始值為undefined ...

javascript變數提公升和函式提公升

variable hoisting變數提公升是js比較有特點的地方,它允許你先使用變數,在其後面再進行變數宣告,不會丟擲 uncaught referenceerror異常。雖然變數被提公升到前面,但是它的預設值則是undefind,在引用的時候也使用這個值,知道在其面後進行賦值,在使用時候即為所贖...

JS函式提公升和變數提公升

js引擎在執行整個js 的過程中,分為倆步。第一步是讀取和解析js 第二部是執行。在引擎解析js 的時候,當解析器遇見變數宣告 var 變數名 和函式宣告 function 函式名 的時候,會將這些宣告提到各自作用域的最前面。在es6之前,js是沒有塊級作用域的。只有2種作用域 注 在其他語言中,被...