javascript中:(function(){})();如何理解?

155 阅读1分钟

(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(){})是一个标准的函数定义,但是没有复制给任何变量。所以是没有名字的函数,叫做匿名函数。没有名字就无法像普通函数那样随时随地调用了,所以在他定义完成后就马上调用他,后面的括号()是运行这个函数的意思