闭包与即时函数

有一个重要的构造是在 JavaScript 高级函数式编程中经常使用的,这种构造依赖于对闭包的充分利用,比如:(function(){})()
这种模式的代码,毫无疑问可能用在很多地方,它给 JavaScript 语言带来了出乎意料的能力。让我们分解这段代码,探究其内部到底发生了什么。

首先,先忽略第一组括号的内容,再回头来看代码:(...)()

众所周知,可以通过函数名加圆括号:functionName(),的语法方式调用任意一个函数。但是在这里,我们可以使用任意一个引用函数实例的表达式作为函数的名称。就像下面的代码,使用变量名调用该变量所引用的函数:

与其它表达式在一起使用,我们需要将一个操作符——函数调用操作符 ( ) ,应用在整个表达式上,所以需要用圆括号将该表达式括起来。

也就是说,在 (...)() 中,第一组圆括号仅仅是用于划定表达式的范围,而第二个圆括号则是一个操作符。如下代码,将函数引用通过圆括号括起来是完全合法的:

查看全文