1. function(){}();
2. (function(){})(); (比1多了一对圆括号)
3. function(a){}(1); (比1多了一个参数)
这3种里,除了1外,2和3的语法都是对的,但是意思不一样。
按照函数调用的语法形式,一个表达式(这里是函数表达式)后跟一对括号就算。
但为什么没有最前面的括号就没有函数调用的效果?
因为这个函数表达式同时也是函数声明,在编译层面上,是以函数声明和语句为
单位切分段落的,语句也包括表达式语句。按规范所述,function开头的,哪怕
形式符合表达式语句,也不算数,而是算作函数声明为优先。
所以,以上3条被编译器断句为:
1. function(){} (); //一个函数声明;接后面的 (); 部分语法错
2. (function(){})(); //一个调用表达式语句
3. function(a){} (1); //一个函数声明;接一个基本表达式语句。
第一个()的目的,就是构造一个基本表达式,消除函数声明的优先性。
【 在 komac (密钥) 的大作中提到: 】
: (//这个括号
: function print_today()
: {
: ...................
--
FROM 218.241.172.*