JavaScript 关于this对象的问题

今天看高级程序设计时阅读到第七章看到了this的内容,是说在闭包中使用this的问题。

this对象: 是在运行时基于函数的执行环境绑定的(意思是谁在调用,this就是谁)

var name = "The Window";
var object = {
    name: "My Object",
    getNameFunc: function () {
        return function () {
            return this.name;
        };
    }
};
alert(object.getNameFunc()()); //"The Window"(在非严格模式下)

关于这个this指针的位置,编译器给出 return 出的 this.name 值 是The Window。

object.getNameFunc 在调用的时候 this 是指向 object的,但是getNameFunc 这个函数返回了一个匿名函数。首先,匿名函数的执行环境是全局的,所以返回出来的匿名函数在执行的时候 this就会指向 window.name 了 而不是 object.name。


在这个小节末端的代码使我感到有趣:

var name = "The Window";
var object = {
    name: "My Object",
    getName: function () {
        return this.name;
    }
};
object.getName(); //"My Object"  第一行
(object.getName)(); //"My Object"  第二行
(object.getName = object.getName)(); //"The Window",在非严格模式下  第三行

注释中我标注了第一行,第二行,第三行:

第一行毋庸置疑的,那么第二行,第三行什么意思呢?

第二行用括号括住了object.getName,但实质上他是括号内在引用object.getName ,执行环境依然是obejct。

第三行可能一开始会有点懵逼,但是分享一个概念,赋值表达式会返回这个值的本身,也就是说,当我们赋值了object.getName 之后,这个表达式会返回object.getName 的值(也就是 一个匿名函数 返回this.name)。

所以调用这个匿名函数时就会像第一个例子一样,由于执行环境在全局下,返回 The Window,如下:

(function () {
     return this.name;
 })(); // The Window

猜你喜欢

转载自blog.csdn.net/yang52ya7/article/details/80223981