【发布时间】:2018-03-06 05:11:25
【问题描述】:
我试图将闭包指定为参数的默认值,但想知道为什么以下会引发语法错误:
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 结合会引发语法错误?
【问题讨论】:
-
也许它解析为好像它是无效的
(myFunc || ()) => {};。也就是说=>运算符的优先级低于||。
标签: javascript ecmascript-6 closures