2016-07-30 113 views
1

我在使用模塊模式(擴充)和ES6 let關鍵字時出現錯誤。ES6模塊模式錯誤(擴充)

This Works。

var Example = (Example => { 
    Example.name = ""; 
    return Example; 
})(Example || {}); 

console.log(Example); 

這沒有。

let Example = (Example => { 
    Example.name = ""; 
    return Example; 
})(Example || {}); 

console.log(Example); 

我收到此錯誤。

Uncaught ReferenceError: Example is not defined

})(Example || {}); 
    ^^^^^^^ 

回答

2

當你意識到這個答案變得相當清楚:

var x = (j => j)(x) 

..becomes這樣的:

var x = undefined 
x = (j => j)(x) 

這真的宣佈xundefined之前評估表達式和設置x到結果。

然而,let不具有財產 - 這不是懸掛:

let y = (j => j)(y) 

..gets評價這一點。

y不存在當你做(j => j)(y),所以它會引發一個引用錯誤。

+1

完美。感謝一堆@towerofnix :) –

1

var聲明是hoisted,這意味着名稱被認爲是「聲明」,但undefined直到整個功能範圍內分配的(而不是塊範圍)。相反,ES6 let聲明未被掛起,因此參考Example導致ReferenceError,因爲尚未聲明。

+0

非常感謝@ patrick-roberts :) –