通过例子理解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"。

你可能感兴趣的:(通过例子理解JS闭包)