「闭包」
要理解什么闭包,首先要知道闭包为啥出现,实际代码中,我们想在某一的作用域中使用一个变量,很简单,直接在外部声明一个全局变量就好了,但是问题出现了,因为是全局变量,可能一不下心就让修改了,而且如果执行环境作用域比较深,作用链查找速度越慢,无疑造成性能的浪费。在es5中,也没有块级作用域的概念,此时闭包自然而然就出现了,注意看哦,我说的是自然而然,并非刻意设计,下面就是一个最简单闭包实例:
从执行结果上看,立即执行函数中的log执行了,但下面的log显示未找到变量的报错内容,报错的原因,在作用域链中,函数可以访问外部的变量,外部不能访问函数内的变量。这样就能拥有私有变量,「函数」和「函数内部能访问到的变量」(也叫环境)的总和也就是闭包了。
闭包简而言之,就是把变量变成私有物,只能自己使用,不让外人去窥觊,当然再拥有的同时,还能根据作用域链去访问外部的变量。