请有人解释一下为什么JSLint会接受这种风格:
(function () { /* .... */ }());但不喜欢这个:
(function () { /* .... */ })();我知道JSLint有一些非常严格的规定,但至少这些规则中的大多数都有某种目的。我只是想不出这件事的目的是什么。
(我不是想在这里争论,我只是想了解原因。)
发布于 2014-08-28 16:04:20
好的,这几乎和最近的jslint标记问题的问题完全一样,它也问到了防御领先的分号。在问之前,记得在你的标签里搜索!
这就是说,让我们自由通过--另一个问题没有一个被接受的答案,所以给你。(也就是说,我们应该把他们中的一个当成傻瓜来关闭)。
这就是为什么克罗克福德说第二个版本更好的原因。
来自http://javascript.crockford.com/code.html
当要立即调用函数时,应该将整个调用表达式包装为parens,这样可以清楚地看到所产生的值是函数本身的结果,而不是函数本身的结果。
为了稍微扩展一下,我们知道,JavaScript不是一种强类型语言。将function推到变量中并不少见,事实上,将函数推入var比直接调用匿名函数的值更常见。
var whatAmI = function () { return 5; }; // You're a function!与
var whatAmI = (function () { return 5;}()); // You're the number 5!因此,在代码中添加一点语法糖来清楚地显示何时调用,而不是设置对函数的引用是值得的。
不要被那些抱怨说很难把道格拉斯·克罗克福德的观点和JSLint区分开来的人所困扰。他们是对的,这很好!
在一个足够大的项目中,你为什么要不同意他的意见?我从来没见过克罗克福德需要客观错误的东西。JSLint中的所有规则都可以说是好的,共享项目中代码的标准化通常是一件非常好的事情。他教你好(!坏?)免费的习惯。值得一起玩。
https://stackoverflow.com/questions/25551231
复制相似问题