【问题标题】:How to fix 'Function declarations should not be placed in blocks' error in Javascript es6?如何修复 Javascript es6 中的“函数声明不应放在块中”错误?
【发布时间】:2019-11-24 10:29:18
【问题描述】:

很久没用Javascript了,试着搞懂什么是es6、modules和iife。

所以我做了一小段代码:

{
    'use strict';

    let version = '1.0.0';

    function init(){
        /* ... */
    }

    window.Test = {
        version: version,
        init: init
    };
}

而 jshint 返回此错误:函数声明不应放在块中。使用函数表达式或将语句移到外部函数的顶部。

但是,如果我使用 es5 格式 (function(){...}()) 没有问题。那我误会了什么?

此外,如果有人有时间再回答一些问题:

  • 'use strict' 是必要的还是多余的?
  • 我使用 iife,但它也是一个模块吗? (我想,我对这部分有很大的误解)
  • window.Test 是导出我的变量 Test 的最佳方式吗?

提前感谢您的回答,Sam。

编辑:了解模块的好视频:https://www.youtube.com/watch?v=qJWALEoGge4

【问题讨论】:

  • “我使用 iife” - 不,您的示例中没有 IIFE。
  • 你如何处理这段代码?它是由其他东西导入的,还是 init() 做了你想做的一切?
  • 为什么它不是 IIFE ?看到这些网站后,我认为是这样:es6-features.org/#BlockScopedFunctionsjack.ofspades.com/es6-iife-with-fat-arrow-functions
  • 我在 html 页面中使用它,函数 init 仅用于示例,我有很多函数可以放入这个脚本中,我想通过使用测试来像 API 一样使用它变量。

标签: javascript ecmascript-6 es6-modules jshint iife


【解决方案1】:

而 jshint 返回此错误:函数声明不应放在块中。使用函数表达式或将语句移到外部函数的顶部。

这意味着 jshint 不理解 ES6。或者您可能需要对其进行配置以使其正常运行。

'use strict' 是必要的还是多余的?

您在此处使用的那个不起作用,因为指令序言只能放在函数中(或在模块或脚本的开头),而不能放在块中。

我用的是 iife,但它也是一个模块吗?

不,您在这里没有使用IIFE。这只是一个街区,但that's ok

它确实实现了模块模式(“创建一个可以访问私有范围内部的对象”),但它不是 ES6 模块。

window.Test 是导出我的变量Test 的最佳方式吗?

不,我建议使用var 声明它。

【讨论】:

  • 我想,我现在明白了。谢谢。
猜你喜欢
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 2017-03-11
相关资源
最近更新 更多