闭包是指有权访问另一个函数作用域中的变量的函数;【JavaScript高级程序设计】
函数对象可以通过作用域链(函数的执行依赖于变量作用域,在函数定义是决定)相互关联起来,函数体内部的变量都可以保存在函数作用域上,这种特性称为闭包(函数也是一种闭包)。【JavaScript权威指南】
在闭包中,使用this容易出现一个错误,如下:
var test = function(){ var name = "inner"; output : function(){ return this.name; } <span style="font-family: Arial, Helvetica, sans-serif;">}</span> <span style="font-family: Arial, Helvetica, sans-serif;">var name = "outer";</span> <span style="font-family: Arial, Helvetica, sans-serif;">test.output(); //"outer"</span> 这是因为闭包在外部函数的时候无法引用(保存)内部的this,所以,要想使函数输出inner,就必须将this 保存下来:引用一段JavaScript权威指南的代码:
var test = function(){ var name = "inner"; var that = this; output : function(){ return that.name; } <span style="font-family: Arial, Helvetica, sans-serif;">}</span> <span style="font-family: Arial, Helvetica, sans-serif;">var name = "outer";</span> <span style="font-family: Arial, Helvetica, sans-serif;">test.output();</span> 引用一段JavaScript权威指南的代码: