(function(){})(),是一种立即执行函数的写法,即IIFE(Immediately Invoked Function Expression),这种函数在函数定义的地方就直接执行了。
常用的函数声明和调用分开的写法如下:
function foo () {/*...*/} // 这是定义,Declaration;定义只是让解释器知道其存在,但是不会运行
foo(); // 这是语句,Statement;解释器遇到语句是会运行它的。
普通的函数声明function foo() {}是不会执行的,如果直接写成function foo(){}()解释器会报错,因为错误的语法。
IIFE函数的调用方式通常是将函数表达式、它的调用操作符、分组操作符放到一个括号内,来告诉解释器这里有一个需要立即执行的函数。否则通常情况下,解析器遇到一个function关键字,都会把它当做是一个函数声明,而不是函数表达式。
如下几种写法都是可以的:
(function foo() {/*...*/}());
(function foo() {/*...*/})();
!function foo() {/*...*/}();
+function foo() {/*...*/}();
-function foo() {/*...*/}();
~function foo() {}(/*...*/);
作用域:
javascript中:(function(){})()是匿名函数,主要利用函数内的变量作用域,避免产生全局变量,影响整体页面环境,增加代码的兼容性。
(function(){})是一个标准的函数定义,但是没有复制给任何变量。所以是没有名字的函数,叫做匿名函数。没有名字就无法像普通函数那样随时随地调用了,所以在他定义完成后就马上调用他,后面的括号()是运行这个函数的意思