(function(){ ... }()) (function(){ ... })()
// 只不过是把函数的引用调用换成了函数本身的调用,然后告诉Javascript引擎,圆括号前面的是函数表达式,而不是申明。
避免Uncaught SyntaxError: Unexpected token var fn = function(){ ... } fn()
以上两种方式是函数自执行的常见方式
JavaScript 立即(自)执行函数:
javascript 里没有私有作用域的概念,在大型项目里,函数或变量很容易被不小心覆盖掉,依据JS里作用域链(函数外部不能访问函数内部的变量,函数内部的子函数可以访问父级作用域的所有变量)的特性。用匿名函数作为一个“容器”,“容器”内部可以访问外部的变量,而外部环境不能访问“容器”内部的变量,所以 (function(){ ... })()
内部定义的变量不会和外部的变量发生冲突,俗称“匿名包裹器”或“命名空间”。
jQuery 使用的就是这种方法,将 jQuery 代码包裹在 (function(window,undefined){ ...jquery代码...})(window)
中,在全局作用域中调用 jQuery 代码时,可以达到保护 jQuery 内部变量的作用
匿名函数:使用 function
关键字声明一个函数,但未给函数命名,所以叫匿名函数,匿名函数属于函数表达式,匿名函数有很多作用,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序或创建闭包
IIFE好处:
一是不必为函数命名,避免了污染全局变量
二是IIFE内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量
参考链接:https://www.jb51.net/article/127527.htm
https://www.cnblogs.com/TomXu/archive/2011/12/31/2289423.html