2017-06-06 94 views
2

我会在浏览器ES6箭头功能

let foo =() => ({ bar: 2 }) 

测试该却不小心输入

let foo =() => { bar: 2} 

为什么不抛出一个错误?

+1

因为这是正确的语法 –

+1

这是什么都与范围呢? – deceze

+1

'let foo =()=> {bar:2}'' - “bar”是一个标签。所以,如果你调用这个函数,它将返回“undefunied” – lomboboo

回答

0

Τhis是基本语法:

() => { statements } 

和先进的:

// Parenthesize the body of function to return an object literal expression: 
params => ({foo: bar}) 

MDN Arrow functions

0

两个语法是正确的,但他们没有定义相同功能。

function foo1() { 
    return {bar: 2}; 
} 

function foo2() { 
    bar: 2; 
} 
0

取决于什么酒吧。如果它的标签,那将是对象的关键。 但是,如果它是一个变量,该语法将无法正常工作。

为好奇的心态一些其他的语法如下所示: -

let foo =() => ({ bar: 2}); //works. object is returned 
//let foo =() => ({ 'bar': 2}); //works. object is returned 

//let foo =() => { let bar = 2; return bar; }; //works 
//let foo = (() => { let bar = 2; return bar; }); //works 
//let foo = (() => { let bar = 2; return bar}); //works 

//let foo =() => ({ let bar = 2; return bar; }); //WONT work 
//let foo = (p1=3) => p1 ; //works 
let foo =() => 1; //works 

console.log(foo());