1.匿名函数不能单独定义,必须进行赋值操做或者当即执行,不然会被JS引擎定义为语法错误html
1 function(){alert(dada);} 2 VM229:1 Uncaught SyntaxError: Unexpected token
2.在函数体后面加括号就能当即调用,这个函数形式必须是函数表达式,不能是函数声明安全
1 function(){alert(123);}(); 2 VM265:1 Uncaught SyntaxError: Unexpected token (
3.能够在函数前面加符号,或者用括号将函数包住来消除函数声明框架
1 (function(){alert(123);})(); 2 undefined
4.消除函数声明最安全的作法是加括号,由于运算符号还会和函数的返回值进行运算,形成没必要要麻烦frontend
5.包住函数表达式的括号能够括住参数,也能够不括住,效果是同样的函数
1 (function(){alert(123);}()); 2 undefined
6.当即执行函数的做用:创造一个做用域空间,防止变量冲突或覆盖spa
接下来看当即执行函数的两种常见形式:( function(){…} )()和( function (){…} () ),一个是一个匿名函数包裹在一个括号运算符中,后面再跟一个小括号,另外一个是一个匿名函数后面跟一个小括号,而后整个包裹在一个括号运算符中,这两种写法是等价的。要想当即执行函数能作到当即执行,要注意两点,一是函数体后面要有小括号(),二是函数体必须是函数表达式而不能是函数声明。先看下图:htm
从图中能够看出,除了使用()运算符以外,!,+,-,=等运算符都能起到当即执行的做用。这些运算符的做用就是将匿名函数或函数声明转换为函数表达式,以下图所示,函数体是函数声明的形式,使用运算符将其转换为函数表达式以后就可达到当即执行效果:对象
2.使用当即执行函数的好处blog
经过定义一个匿名函数,建立了一个新的函数做用域,至关于建立了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏污染全局的命名空间。此时如果想访问全局对象,将全局对象以参数形式传进去便可,如jQuery代码结构:token
其中window便是全局对象。做用域隔离很是重要,是一个JS框架必须支持的功能,jQuery被应用在成千上万的JavaScript程序中,必须确保jQuery建立的变量不能和导入他的程序所使用的变量发生冲突。