1. 程式人生 > >js變量提升與函數提升

js變量提升與函數提升

bsp pan true 操作 使用 defined pre turn 處理

在es6之前,js語言並沒有塊級作用域,即{}形成的作用域,只有全局作用域和函數作用域,所謂的提升,即是將該變量的聲明或者函數的聲明提升,舉個例子

console.log(global); //undefined
var global = 111;
console.log(global);//111

顯然,上面代碼處於一個全局的作用域中,在該作用域中使用var聲明了一個global變量,其實際的聲明過程如下:

var global;
console.log(global); //undefined
global = 111;
console.log(global) //111

上面可見,var global的變量聲明被提升到第一行了,因此第二行中的輸出顯示為undefined,第三行才對global變量進行賦值操作;

因此,需要註意的:

1、變量的聲明在該作用域中,會被提升到出函數聲明的最高級;

2、需要區分變量的聲明變量的賦值是兩種不同行為,需要分開處理;

函數提升:

函數常見的創建有兩種方式:

1、函數聲明;

function func(){
  ......  
}

  

2、函數表達式

var func = function() {}

然而,只有第一種函數聲明的方式才有函數提升的作用。

舉個例子:

console.log(func());//1
function func() {
  return 1;      
}

也就是說,就算函數在console之後被定義,依然會提升到該作用域的最頂端,而且高於變量提升。

js變量提升與函數提升