js變量提升與函數提升
阿新 • • 發佈:2017-08-31
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變量提升與函數提升