使用||将闭包指定为默认参数抛出语法错误

时间:2018-03-06 05:11:26

标签: javascript ecmascript-6 closures

我试图将一个闭包指定为参数的默认值,并且想知道为什么以下引发语法错误:

var myVar, myFunc;
// This throws a syntax error
myVar = myFunc || ()=>{};
console.log(myVar);

当以下功能相似的示例按预期工作时。

var myVar, myFunc, closure;
myVar = (myFunc !== undefined) ? myfunc : ()=>{};
console.log('1.', myVar); // ()=>{}

myVar = myFunc ? myfunc : ()=>{};
console.log('2.', myVar); // ()=>{}

myVar = myFunc || (()=>{});
console.log('3.', myVar); // ()=>{}

myVar = myFunc || function (){};
console.log('4.', myVar); // function(){}

closure = ()=>{};
myVar = myFunc || closure;
console.log('5.', myVar); // ()=>{}

我原本以为分配一个闭包会像指定一个函数一样工作是否有理由将它与逻辑OR直接组合会引发语法错误?

2 个答案:

答案 0 :(得分:1)

它被称为MDN上箭头函数语法的行为,Mozilla firefox产生错误

  

SyntaxError:箭头函数参数无效(箭头函数周围的括号可能有帮助)

箭头功能周围的括号有帮助。我没有尝试破译ECMASript规范的内容,以确定如何以不可读的方式指定语法。

答案 1 :(得分:0)

您可以尝试将箭头功能包装在方括号中



var myVar, myFunc;
myVar = myFunc || (() => {});
console.log(myVar);