【问题标题】:Module Pattern Error in ES6 (Augmentation)ES6 中的模块模式错误(增强)
【发布时间】:2016-07-30 23:20:10
【问题描述】:

在使用带有 ES6 let 关键字的模块模式(增强)时出现错误。

这行得通。

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

console.log(Example);

这不是。

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

console.log(Example);

我收到此错误。

未捕获的引用错误:未定义示例

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

【问题讨论】:

    标签: javascript node.js ecmascript-6 babeljs


    【解决方案1】:

    当你意识到这一点时,答案就变得相当清楚了:

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

    ..变成这样:

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

    它确实将x 声明为undefined 评估表达式并将x 设置为结果。

    但是,let 没有该属性 - 它没有被提升:

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

    ..得到评估。

    y 不存在,当您执行(j => j)(y) 时,它会引发引用错误。

    【讨论】:

    • 完美。非常感谢@towerofnix :)
    【解决方案2】:

    var 声明为 hoisted,这意味着名称被视为“已声明”,但 undefined 直到分配在整个函数范围内(与块范围相反)。相反,ES6 的let 声明没有被提升,所以引用Example 会导致ReferenceError,因为它还没有被声明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多