遇到一个 JS 语法错误, 加了分号就可以运行

查看 133|回复 9
作者:lxy42   
demo 在 jsfiddle
对 JS 不太熟悉, Google 上搜了一些关键词(semicolon anonymous function syntax error)没找到答案. 为什么一定要在调用匿名函数的上一行语句添加加分号?

semicolon, syntax, jsfiddle, 加分号

vinsony   
下面一行是括号,不加分号会被识别成函数执行
rocmax   
Write semicolons in ONLY 5 cases
;-less        // line starts with unary - operator
;+less        // line starts with unary + opeartor
;/less/        // line starts with regexp literal
;[less]        // line starts with array initializer
;(less)        // line starts with grouping operator, such as IIFE
NOTE: In real-world, only the last case is common.
chnwillliu   
function test(a) {
return b => c => b(a,c);
}
test(1)(function (b,c){return b+c})(3)
rekulas   
我猜你应该年龄不大,因为上古时期的程序员写 js 都是加了分号的,省略分号是最近 10 年流行起来的
由于始终存在一些例外,所以我其实还是偏向于加分号,因为我喜欢统一
不过做项目的话个人喜好放一边,还是得跟着项目规范走
lujiaxing   
它给理解成了
console.log 返回了个函数, 然后后面的括号是在试图调用 console.log 所返回的函数并将括号中的 function 作为 console.log 所返回的函数的参数... 那当然会报错.
本质上, 你的代码等效于:
```
const console = {
log: (str) => (func) => (func(), window.console.log(str))
};

console.log("hello")(() => alert("It's worked!!!"))
```
foolnius   
var name = hello
(function () {})()
var name = hello(function () {})()
请问这两者怎么区分
lujiaxing   
@rekulas 是的. 现在我司的前端代码规范就是要求语句后没有分号.
谁加分号 `npm run build` 铁报错. jslint 都过去不.
lxy42
OP
  
谢谢各位, 知道原因了.
chengxy   
const f = (a) => {
return (b) => {
return a + b
}
}

f(1)(2)
因为匿名函数有可能再返回一个函数
您需要登录后才可以回帖 登录 | 立即注册

返回顶部