闭包
闭包是指:在一个函数内部,有能够访问外部作用域中的变量的函数。
特点:即使外部函数执行完毕,由于闭包的存在(引用外部函数的变量),该变量的引用将存在于闭包的作用域里直至闭包销毁。
所以就会出现像下面这个例子那样:outerFn执行完毕了,但是c函数还是可以访问b变量。
立即执行函数
即时函数是指定义完了立即调用的匿名函数,往往用它来开辟一个独立的作用域(命名空间)。即时函数是为了形成块级作用域,来弥补js函数级作用域的局限
立即执行函数执行完毕之后,在函数外部无法访问内部的局部变量(注意:局部变量)
内部函数自执行,也可看出它是个闭包,只是这里内部函数执行完一次后就销毁了。
实际上,人们经常用即时函数来构造闭包。为什么呢?因为即时函数只能执行一次,执行完了立马消失,所以不会重复创建闭包,也不会对当前作用域造成任何污染。
相同点:他们都是函数的一种特殊形态,并且可以共存。而且闭包配合即时函数“口味更佳”。 不同点:即时函数是定义一个函数,并立即执行。它只能被使用一次,相当于“阅后即焚”。闭包是指一个函数与它捕获的外部变量的合体,按照MDN的说法,闭包就像一个对象—一个具有一个方法(行为)和一个或多个私有字段(状态)的对象。从这个角度看,闭包是符合面向对象的封装思想的。