0

在撸代码的时候遇见这个问题了。各位大神请帮我看下。谢谢了。

(function(){
    var name = 'Tom';
    console.log(this);//window--------------------------(1)
    console.log(this.name);//空-------------------------(2)
})();
var age = "22"
console.log(this);//window------------------------------(3)
console.log(this.age);//22------------------------------(4)

为什么(2)这个地方会输出是空?而不是Tom
为什么(4)这个地方会输出22?
打印出来的this都是window。这两个this有什么不同么?
为什么出现这个情况?
麻烦各位大神指点下。前端小白,感激不尽。

2017-11-27 提问

查看全部 9 个回答

0

已采纳

function中的this指向的是调用该function的对象,比如:

var name='window';
var obj={
    name:'obj',
    foo:foo
}
function foo(){
    console.log(this.name);
}
obj.foo();                 //obj,调用foo的对象是obj,所以输出obj
foo();                     //name,调用foo的对象是全局对象window,所以输出window

注:全局环境下var,function声明的变量会自动成为全局对象的属性,函数内的var,function声明不会挂载到全局对象上。

var name='window';      //相当于js内部定义了window.name='window';
function foo(){}        //相当与window.foo=function foo(){} ;即foo()你可以看为是window.foo()

this===window          //全局环境下this指向全局对象window

匿名函数调用的对象是window,所以内部的this指向window对象,(2)中this.name相当于window.name,window有个name属性默认是空字符串,所以输出'',(4)中this.age相当于window.age,所以是22

推荐答案

3

两个this都是window
第一个this.name为空是因为没有window.name,里面的name是局部变量,不是window.name
第二个this.age为22是因为age是全局变量,相当于window.age

var window.age;
(function(){
    var name = 'Tom'; //这里name 是局部变量,不会变量提升
    console.log(this);//window--------------------------(1)
    console.log(this.name);//空-------------------------(2)
})();
window.age = "22";
console.log(this.age);//22------------------------------(4)

推广链接