千机变 发表于 2021-11-15 21:45:15

JS阮一峰闭包讲解的问题


var name = "The Window";
                 var object = {
                   name : "My Object",
                   getNameFunc : function(){
                     return function(){
                     return this.name;
                                          };
                                        }
                                };
                                console.log("没有定义全局变量的",object.getNameFunc()());//The Window
                                // 在执行时this属于全局域,因此结果是the window

这里的getNameFunc()()里的是什么意思?有谁能讲解一下吗?

wp231957 发表于 2021-11-15 21:45:16

getNameFunc这是一个函数,因为无参数,所以用空括号表示调用,因为它的返回值也是一个函数,并无参数,所以再加一对空括号表示调用

小仙 发表于 2021-11-19 00:52:51

本帖最后由 小仙 于 2021-11-19 01:13 编辑

这道题应该属于this指向问题。this的指向只与函数被调用的位置有关系。应为object.getNameFunc()()可以看成const getName = object.getNameFunv(); getName()。这里的this指向window是因为该函数在全局作用域下被调用,属于默认绑定到window对象,这里this指向window是建立在非严格模式下,严格模式下会指向undefined。

千机变 发表于 2021-11-19 17:29:32

小仙 发表于 2021-11-19 00:52
这道题应该属于this指向问题。this的指向只与函数被调用的位置有关系。应为object.getNameFunc()()可以看成 ...

thankyou
页: [1]
查看完整版本: JS阮一峰闭包讲解的问题