function jam(){
console.log("ok");
}()
jamlee 2015/2/14 22:49:11
(function jam(){
console.log("ok");
}())
PHPz2017-04-10 14:58:58
@公子 答案没说清楚,js中的分隔符就是任意的空白符,像是空格,tab,换行等都算,你有一个还是两个没影响。
正确的解释是应该函数表达式与函数声明的区别。
详细的解释还是看看这里:
http://stackoverflow.com/questions/1634268/explain-javascripts-encapsulated-anonymous-function-syntax/1634321#1634321
巴扎黑2017-04-10 14:58:58
实际上,第一种写法会抛出SyntaxError
。
function jam(){
console.log("ok");
}()
在 JavaScript 代码解析的时候,如果碰到 function
开头的语句,默认为认为这是一个函数声明。所以在编译器看来,上述的代码就是:
function jam(){
console.log("ok");
}
()
也就是说,在编译器看来,这个语句做了两件事情:
jam()
函数()
运算符声明函数是合法的,但是使用()
运算符时出错了。 在 JavaScript 中,()
使用有两种场景,一种是作为函数调用符,一种是分隔表达式(提高优先级)。而上面这个代码中,无论哪个场景都不符合,所以抛出了一个语法错误。
第二段代码是 立即执行的匿名函数表达式(IIFE)。
更详细的可以参考这篇文章: [译] 立即执行函数表达式(IIFE)
伊谢尔伦2017-04-10 14:58:58
~function jam(){
console.log("ok");
}()
!function jam(){
console.log("ok");
}()
+function jam(){
console.log("ok");
}()
-function jam(){
console.log("ok");
}()
*function jam(){
console.log("ok");
}()
阿神2017-04-10 14:58:58
首先你要定义一个函数,于是你会这么写:
function jam() {};
其实这是 js 里的一种语法糖,它等价于:
var jam = function() {};
然后你想执行这个函数,脑洞大开的人会这么写:
function jam() {}();
但是这么写就报错了,其实这种写法也不算错,因为它确实是 js 支持的函数表达式,但是同时 js 又规定以 function 开头的语句被认为是函数语句,而函数语句后面是肯定不会带 () 的,所以才报错,于是聪明的人想出来,加上一对括号就可以了。于是就变成了这样:
(function jam() {}())
详情参加 ECMAScript 的 Expression Statement 章节:链接描述
天蓬老师2017-04-10 14:58:58
function
关键字作为一句话的开头的函数,而任何不以function
开头的(只限在一句话内)函数,都是函数表达式。()
来自执行,而函数表达式则可以。迷茫2017-04-10 14:58:58
这是两种不同的函数形式,第一种是函数定义式,第二种是函数的自执行,后面的圆括号用来执行函数。而且一般都是匿名函数采取的。其实是这样的:()()
第一个括号包裹整个函数,而第二个圆括号用来执行函数的