通过例子理解JS闭包

理解闭包的前提是对JS变量作用域的熟悉,变量作用域包括全局变量和局部变量。

简要说明:函数内部能够访问全局变量,函数外部不能访问函数内部的局部变量,在函数内部声明的局部变量必须使用var标识符,不加var的变量默认为函数外的全局变量。

函数闭包可以简单描述为“定义在一个函数内部的函数”。闭包要解决的就是实现函数外部对函数内部局部变量的访问。

下面是两个闭包的示例:

(1)var name = "The Window";

         var object = {

               name : "My Object",

               getNameFunc : function(){

                      return function(){

                            return this.name;

                      };

                }

        };

       alert(object.getNameFunc()());

(2)var name = "The Window";

         var object = {

                 name : "My Object",

                 getNameFunc : function(){

                        var that = this;

                        return function(){

                               return that.name;

                        };

                 }

        };

       alert(object.getNameFunc()());

相关知识点:

a. this的指向是在运行时决定的

b. 每次执行的匿名函数都是一个新的function,且新的function的执行上下文为window,即此时的this指向全局

c. getNameFunc函数为object的一个属性,使用“var that = this;”中的this指向object,而不是widnow


输出结果 代码(1)输出"The Window",代码(2)输出"My Object"。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 三、闭包和高阶函数 3.1 闭包 3.1.1 变量的作用域 所谓变量的作用域,就是变量的有效范围。通过作用域的划分...
    梁同学de自言自语阅读 1,489评论 0 6
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,827评论 2 17
  • 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 一、变量...
    zock阅读 1,084评论 2 6
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,097评论 1 10
  • ● 闭包基础 ● 闭包作用 ● 闭包经典例子 ● 闭包应用 ● 闭包缺点 ● 参考资料 1、闭包基础 作用域和作...
    lzyuan阅读 959评论 0 0