轻松理解 闭包

    xiaoxiao2022-06-23  28

    引用一段JavaScript权威指南的代码: function counter(){ var n=0; return {counter: function(){ return n++; }, reset: function(){ n = 0;} }; } var c = counter(), d = counter(); c.count(); d.count(); c.reset(); d.reset(); 闭包的定义:

    闭包是指有权访问另一个函数作用域中的变量的函数;【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权威指南的代码:
    转载请注明原文地址: https://ju.6miu.com/read-1123418.html

    最新回复(0)