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

2022-02-25 09:32:19 字數 1372 閱讀 2621

在 es6 出來之前,沒有塊級作用域,只有全域性作用域 和 函式作用域。

變數提公升指的是 將變數宣告提公升到它所在作用域的最開始部分。

例子:

console.log(foo); //

undefined

var foo = '變數提公升';

console.log(foo)

//變數提公升

相當於:

var

foo;

console.log(foo)

//undefined

foo = '變數提公升';

console.log(foo);

//變數提公升

函式建立有兩種方式,一種是函式宣告形式,一種是函式字面量形式,而只有 函式宣告形式 才有函式提公升。

例子:

console.log(bar);  //

f bar()

console.log(bar()); //

undefined

var bar = 456;

function

bar()

console.log(bar);

//456

bar = 789;

console.log(bar);

//789

console.log(bar()) //

bar is not a function

相當於:

//

函式提公升,函式提公升優先順序高於變數提公升

var bar = function

() ;

//變數提公升,變數提公升不會覆蓋(同名)函式提公升,只有變數再次賦值時,才會被覆蓋

varbar;

console.log(bar);

console.log(bar());

//變數賦值,覆蓋同名函式字面量

bar = 456;

console.log(bar);

//再次賦值

bar = 789console.log(bar);

console.log(bar())

函式提公升優先順序高於變數提公升,且不會被同名變數宣告時覆蓋,但是會被變數賦值後覆蓋。

例子:

var getname = function

()function

getname ()

getname();

相當於:

function

getname ()

var getname = function

()getname();

//2

隨筆整理自 

感謝博主分享!

js變數提公升與函式提公升的過程

先來看兩個栗子,下面的兩段 分別輸出什麼?段1 function foo console.log a foo 段2 function foo console.log a foo 答案是 段1列印的是1,段2列印的是 a 函式。為什麼會這樣呢?這就涉及到js中的變數提公升和函式提公升的具體過程了。js...

變數提公升與函式提公升

定義 var宣告的變數,js在執行時會將其宣告提公升到它所在作用域的頂端去執行,到我們 所在的位置來賦值。console.log a undefinded,因為一開始執行了var a var a 123console.log v1 undefined var v1 100 function func...

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

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