当我通过jslint运行此代码时
(function () { return "helloooo"; }).call();
Run Code Online (Sandbox Code Playgroud)
它给了我以下错误:
出乎意料的'.'.
这是为什么?
当我将函数赋值给变量,然后调用它时我没有错误.
这个:
var cb = function () { return "helloooo"; };
cb.call();
Run Code Online (Sandbox Code Playgroud)
不返回任何错误.
但是,我想知道为什么我首先得到错误.道格拉斯·克罗克福德的神圣规则我打破了第一个例子吗?
这并不是一件坏事。JSLint 是固执己见的,Crockford 认为当您在括号内使用函数表达式时,您应该直接调用该方法或将其分配给变量,因为其他人查看它可能会混淆函数的值和函数作为价值本身。
对于这种情况,Crockford 建议:
(function () { return "helloooo"; }())
^^
Notice how is the function being called
Run Code Online (Sandbox Code Playgroud)
因此 JSLint 不会期望右括号后有任何内容,这就是为什么它说它不期望.
您使用的来调用call()
.
您可以查看《Javascript 编程语言的代码约定》 (由 Crockford 编写)以了解更多相关信息,特别是查找有关函数的部分。