Cri*_*sty 134 javascript node.js arrow-functions
为什么这在Node.js
控制台中运行(在4.1.1和5.3.0中测试)但在浏览器中不起作用(在Chrome中测试)?此代码块应创建并调用记录的匿名函数Ok
.
() => {
console.log('Ok');
}()
Run Code Online (Sandbox Code Playgroud)
此外,虽然上述工作在Node中,但这不起作用:
n => {
console.log('Ok');
}()
Run Code Online (Sandbox Code Playgroud)
这不是:
(n) => {
console.log('Ok');
}()
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当添加参数时,它实际上会SyntaxError
在立即调用的部分抛出一个.
voi*_*oid 164
您需要使它成为函数表达式而不是函数定义,它不需要名称并使其成为有效的JavaScript.
(() => {
console.log('Ok');
})()
Run Code Online (Sandbox Code Playgroud)
相当于IIFE
(function(){
console.log('Ok')
})();
Run Code Online (Sandbox Code Playgroud)
并且可能的原因是它在Node.js中工作但不在chrome中工作是因为它的解析器将其解释为自执行函数,因为这
function() { console.log('hello'); }();
Run Code Online (Sandbox Code Playgroud)
工作正常Node.js
这是一个函数表达式和chrome和firefox,大多数浏览器都是这样解释的.您需要手动调用它.
告诉解析器期望函数表达式的最广泛接受的方式就是将它包装在parens中,因为在JavaScript中,parens不能包含语句.此时,当解析器遇到function关键字时,它知道将其解析为函数表达式而不是函数声明.
关于参数化版本,这将起作用.
((n) => {
console.log('Ok');
})()
Run Code Online (Sandbox Code Playgroud)
Pau*_* S. 17
如果没有括号,这些都不适用.
为什么?
因为根据规范:
所以ArrowFunction不能在CallExpression的LHS上.
什么这实际上意味着在如何=>
应解释是,它可以在同一水平排序为赋值运算符=
,+=
等等.
含义
x => {foo}()
没有成为(x => {foo})()
x => ({foo}())
(
必须出错,并抛出一个SyntaxError有关于它的通天塔中的错误在这里,太.
归档时间: |
|
查看次数: |
54451 次 |
最近记录: |