也就是说, 会把最后的一对大括号默认解析成一个缺少名字的function,并且抛出一个语法错误信息,因为function声明需要一个名字。
===》 你可能又会想, 如果我在大括号中传入参数是否就会解析成表达式了呢? 
 代码如下: 
function sayHello() 
{ 
alert("hello"); 
}(1); 
 
的确, 错误是没有了。 但是以上的写法等同于以下写法的效果 
 代码如下: 
function sayHello() 
{ 
alert("hello"); 
}; 
(1); 
 
这两句完全没有关系, 函数还是不会执行 
3.正确的写法 
对于JavaScript 来说,括弧()里面不能包含语句,所以在这一点上,解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function声明所以,只要将大括号将代码(包括函数部分和在后面加上一对大括号)全部括起来就可以了。 
 代码如下: 
(function sayHello() 
{ 
alert("hello"); 
}()); 
 
还有一种写法也可以, 就是将后面的大括号移出来, as 
 代码如下: 
(function sayHello() 
{ 
alert("hello"); 
})(); 
 
推荐是使用第一种方式。 
但是目前很多比较好的js library 使用的都是第二种方式。 
比如: web 图形绘制的: git , draw2d ,....