当前位置:  开发笔记 > 编程语言 > 正文

ES6立即调用了箭头功能

如何解决《ES6立即调用了箭头功能》经验,为你挑选了2个好方法。

为什么这在Node.js控制台中运行(在4.1.1和5.3.0中测试)但在浏览器中不起作用(在Chrome中测试)?此代码块应创建并调用记录的匿名函数Ok.

() => {
  console.log('Ok');
}()

此外,虽然上述工作在Node中,但这不起作用:

n => {
  console.log('Ok');
}()

这不是:

(n) => {
  console.log('Ok');
}()

奇怪的是,当添加参数时,它实际上会SyntaxError在立即调用的部分抛出一个.



1> void..:

您需要使它成为函数表达式而不是函数定义,它不需要名称并使其成为有效的JavaScript.

(() => {
  console.log('Ok');
})()

相当于IIFE

(function(){
   console.log('Ok')
})();

并且可能的原因是它在Node.js中工作但不在chrome中工作是因为它的解析器将其解释为自执行函数,因为这

function() { console.log('hello'); }();

工作正常Node.js这是一个函数表达式和chrome和firefox,大多数浏览器都是这样解释的.您需要手动调用它.

告诉解析器期望函数表达式的最广泛接受的方式就是将它包装在parens中,因为在JavaScript中,parens不能包含语句.此时,当解析器遇到function关键字时,它知道将其解析为函数表达式而不是函数声明.

关于参数化版本,这将起作用.

((n) => {
  console.log('Ok');
})()


第一个示例在`Node.js`中工作并实际记录该值.我的问题是它为什么有效?为什么我添加参数时没有?
我没有downvote,但问题是为什么参数化版本在没有参数的完全相同的定义时在Node中不起作用 - 它不是要求匿名函数的Node/Chrome实现之间的区别

2> Paul S...:

如果没有括号,这些都不适用.

为什么?

因为根据规范:

    ArrowFunction被列在AssignmentExpression

    CallExpression的LHS必须是MemberExpression,SuperCallCallExpression

所以ArrowFunction不能在CallExpression的LHS上.


什么这实际上意味着在如何=>应解释是,它可以在同一水平排序为赋值运算符=,+=等等.

含义

x => {foo}() 没有成为(x => {foo})()

口译员试图将其解释为 x => ({foo}())

因此它仍然是一个SyntaxError

因此,解释器决定(必须出错,并抛出一个SyntaxError


有关于它的通天塔中的错误在这里,太.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有