Expected an assignment or function call and instead saw an expression.
对于以下代码行:
(aFunctionorNull) ? aFunctionorNull() : someObject.someMethod();
它突出了someMethod上的最后一个)所以我假设错误就在那里.代码工作,当我将其更改为if(){} else {}语法时,JSHint没有问题.我不介意更长的语法,但我想了解为什么JSHint会说这个,如果这是一个不好的做法.
解决方法
(aFunctionorNull || someObject.someMethod)();
如果aFunctionorNull未定义(或null或falsy),则逻辑或位将导致表达式计算为someObject.someMethod,并调用其结果值(对函数对象的引用,希望如此).这使您有机会在没有大量嵌套三元的情况下编写更加“自动防故障”的代码:
(aFunctionorNull || someObject.someMethod || function(){})();
分组表达式现在被绑定为评估为真值,因此不会抛出任何错误.
为了避免JSHint唠叨你没有对返回值做任何事情,要么将它分配给变量(我不喜欢这样做),要么添加一个小运算符:
~(aFunctionorNull || someObject.someMethod || function(){})();//bitwise not !(aFunctionorNull || someObject.someMethod || function(){})();//logical not,doesn't really matter which one
关于你的最后一个问题:someObject.someMethod确实是一个函数调用.更具体地说,它是在someObject的上下文中调用函数对象.
对于那些不知道这一点的人:JS函数是对象,并且使用bind方法(在Function.prototype上定义)或ad-hoc显式设置被调用的上下文:
var referencetoMethod = someObject.someMethod; referencetoMethod();//<-- inside the function objects,this Now points to the global object
想到它的一个简单方法是JS函数只是在内存/空间/时间中漫无目的地浮动,直到通过引用调用它们,然后将该引用的上下文传递给函数对象,以确定它将是什么对象与…相互作用.遗憾的是,这是默认情况下的全局对象,或者在严格模式下为null.
原文地址:https://www.jb51.cc/js/152952.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。