javascript中的變量提高

變量提高

變量提高即將變量聲明提高到它所在做用域的最開始的部分,即函數聲明和變量聲明老是被JavaScript解釋器隱式地提高(hoist)到包含他們的做用域的最頂端。在ES6以前,JavaScript沒有塊級做用域(一對花括號{}即爲一個塊級做用域),只有全局做用域和函數做用域。前端

  1. 首先看一段簡單的代碼
var name = 'Clam';
(function (){
    console.log(name);
})();

// Clam

上面的代碼很簡單。閒先聲明一個變量名爲name的變量,同時賦值爲Clam。後面是一個當即執行函數,在函數體中控制檯輸出name。結果爲Clam,沒毛病~接着看下面的代碼。函數

  1. 簡單的修改一下上面的代碼
var name = 'Clam';
(function (){
    console.log(name);
    var name = 'Klay';
})()

首先咱們本身分析一下上面的代碼哈:首先聲明瞭一個變量name而且賦值爲Clam,緊接着也是一個當即執行函數,在函數體中首先控制檯輸出了name,可是以後,又聲明瞭賦值了一次變量name
那我來猜測一下,恩,控制檯輸出了Clam,可是在當即執行函數結束以後,變量name的值被修改爲了Klay
可是,上面的代碼運行的結果是:code

undifined
// exm??

這就是我今天關注的東西:變量提高ip

前面說過,變量提高會將變量的聲明提高到其做用域的最前端。這裏,name所在的做用域就是指這個函數做用域,上面的代碼就至關於如下代碼。作用域

var name = 'Clam';
(function (){
    var name;
    console.log(name); //undefined
    name = 'Klay';
})()

函數提高

js中建立函數有兩種方式:函數聲明式和函數字面量式。只有函數聲明才存在函數提高。io

console.log(f1); // function f1() {}   
console.log(f2); // undefined  
function f1() {}
var f2 = function() {}

以上,enjoyconsole

相關文章
相關標籤/搜索