跟java,php等编程语言同样,javascript也采用词法做用域,简单的来讲就是函数的执行依赖于变量的做用域,这个做用域是在函数定义时决定的,而不是函数调用时决定的。为了实现这种词法做用域,还必须引用当前的做用域链。函数对象能够经过做用域链相互关联起来,函数体内部的变量均可以保存在函数做用域内,这种特性称之为“闭包”。javascript
理解闭包首先要了解嵌套函数的词法做用域规则。以下图所示:php
show函数声明了一个局部变量,并定义了一个函数f,函数f返回了这个变量的值,最后将函数f放入执行结果返回。前端
如今咱们来改动下代码,看看结果又会是什么?java
在上面的代码中,将函数内的一对圆括号移动到了f()后。f()如今仅仅返回函数内嵌套的一个函数对象,而不是直接返回结果。在定义函数的做用域外面,调用这个嵌套的函数(包含最后一行代码的最后一对圆括号)会发生什么事情呢?web
想必大多数的人都知道告终果,是返回198,而不是v客学院。,由于嵌套的函数f()定义在这个做用域链里,其中的变量a必定是局部变量,无论在什么时候何地执行f(),这种绑定在执行f()时依然有效。简言之:闭包的这个特性能够捕捉到局部变量(和参数),并一直保持下来,看起来想这些变量绑定到了在其中定义他们的外部函数。编程
(php开发,web前端,ui设计,vr开发专业培训机构,v客学院版权全部,转载请注明出路,谢谢!!!)闭包