在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 為什么這里的this不同

為什么這里的this不同

在擼代碼的時候遇見這個問題了。各位大神請幫我看下。謝謝了。

(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有什么不同么?
為什么出現(xiàn)這個情況?
麻煩各位大神指點下。前端小白,感激不盡。

回答
編輯回答
幼梔

function中的this指向的是調(diào)用該function的對象,比如:

var name='window';
var obj={
    name:'obj',
    foo:foo
}
function foo(){
    console.log(this.name);
}
obj.foo();                 //obj,調(diào)用foo的對象是obj,所以輸出obj
foo();                     //name,調(diào)用foo的對象是全局對象window,所以輸出window

注:全局環(huán)境下var,function聲明的變量會自動成為全局對象的屬性,函數(shù)內(nèi)的var,function聲明不會掛載到全局對象上。

var name='window';      //相當于js內(nèi)部定義了window.name='window';
function foo(){}        //相當與window.foo=function foo(){} ;即foo()你可以看為是window.foo()

this===window          //全局環(huán)境下this指向全局對象window

匿名函數(shù)調(diào)用的對象是window,所以內(nèi)部的this指向window對象,(2)中this.name相當于window.name,window有個name屬性默認是空字符串,所以輸出'',(4)中this.age相當于window.age,所以是22

2017年10月8日 04:31
編輯回答
伴謊

window.name沒有賦值呀,你給window.name賦值之后再運行,就可以訪問到了

window.name = "123"

(function(){
    var name = 'Tom';//在這個自執(zhí)行的函數(shù)中,name屬性并沒有掛載到window對象上
    console.log(this);//window
    console.log(this.name);//123
})();

2018年1月10日 16:10
編輯回答
替身

兩個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)
2018年3月13日 21:46
編輯回答
你好胸

很顯然,無論是function外部還是內(nèi)部this綁定的都是window
1.function內(nèi)var定義變量屬于局部變量,不會綁定到window上,故this.name不存在
2.function外定義的變量為全局變量,會綁定到window對象上,所以this.age有值

2018年6月10日 17:09
編輯回答
赱丅呿

樓上講得很明白了
涉及到了JS作用域(鏈)+ 閉包的內(nèi)容
題主抽時間可以去找資料看看

2017年8月21日 19:35
編輯回答
傲寒

樓上講得很清楚了,主要是涉及到了JS作用域(鏈)+ 閉包的內(nèi)容
(function(){

var name = 'Tom';
console.log(this);//window--------------------------(1)
console.log(this.name);//空-------------------------(2)

})();
這段代碼要加個 var self = this,這樣的話就可以了,或者直接用es6的寫法,還有一個辦法就是將name變量放到外面進行初始化 ,當訪問的時候this.name這樣也是可以的,

2017年12月13日 00:15
編輯回答
不將就

注意下,JavaScript(這里指 ES5)是 函數(shù)級作用域,所以匿名函數(shù)里的變量是局部的,自然不能被全局訪問。

2018年1月6日 11:18
編輯回答
舊時光
http://www.jianshu.com/p/d27f1905a7e7

引用別人寫的文章

2018年6月19日 16:17
編輯回答
怣痛
var name = 'Tom';

改成:

this.name = 'Tom';

應(yīng)該會出現(xiàn)你想要的效果,試試看

2017年4月6日 16:58