前端JS: 通过代码-看函数作用域this对象
生活随笔
收集整理的這篇文章主要介紹了
前端JS: 通过代码-看函数作用域this对象
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
函數(shù)中的this對(duì)象,指向的是調(diào)用該函數(shù)的對(duì)象;誰(shuí)調(diào)用它,它的作用域中的this就指向誰(shuí);
每一個(gè)具體的問題,都值得思考這個(gè)細(xì)節(jié)點(diǎn): 1.以下輸出結(jié)果是:
var obj={name:'test',output:function(){console.log("1");}}console.log(obj.output());var outputFunc=obj.output;outputFunc(); 復(fù)制代碼console: 1 1
2.以下輸出結(jié)果是:
obj={name:'test',output:function(){return this.name;}}console.log(obj.output());var outputFunc=obj.output;outputFunc(); 復(fù)制代碼console: test, ""
3.以下輸出結(jié)果是:
obj={count:1,output:function(){ console.log(this);return this.count;}}console.log(obj.output());var outputFunc=obj.output;outputFunc(); 復(fù)制代碼4.請(qǐng)判斷以下打印輸出結(jié)果是什么?
function a(){function b(){console.log(this);}console.log(this);b();}a();console.log(a);console.log(b);分析: - 首先f(wàn)unction 關(guān)鍵字申明定義一個(gè)函數(shù)a;在函數(shù)a中申明定義一個(gè)函數(shù)b();并且在函數(shù)a();中執(zhí)行b(); - 還是牢記一點(diǎn),對(duì)于函數(shù)中的this對(duì)象,誰(shuí)調(diào)用該函數(shù),函數(shù)中的this對(duì)象就指向誰(shuí);所以當(dāng)在瀏覽器console中執(zhí)行以上代碼時(shí),a()默認(rèn)是window對(duì)象調(diào)用;即:可以理解為window.a(); -根據(jù)以上,第五行中的console.log(this);打印結(jié)果應(yīng)該是window對(duì)象;javascript語(yǔ)言是單線程執(zhí)行;緊接著執(zhí)行同步代碼b();相當(dāng)于是執(zhí)行了a()函數(shù)作用域中的this.b();所以第三行中的console.log(this);打印結(jié)果應(yīng)該也是window對(duì)象; - 第九行console.log(a);相當(dāng)于執(zhí)行了console.log(window.a); function 關(guān)鍵字申明定義了一個(gè)函數(shù)a;所以打印結(jié)果應(yīng)該為一個(gè)函數(shù)對(duì)象:f a(){function b(){console.log(this);}console.log(this);b();}- 第十行:console.log(b);相當(dāng)于執(zhí)行了console.log(window.b);由于在window對(duì)象中沒有申明定義b;所以應(yīng)該打印結(jié)果為 b is not defined ; 復(fù)制代碼console結(jié)果如下:
轉(zhuǎn)載于:https://juejin.im/post/5cc3dadc51882525095bbeae
總結(jié)
以上是生活随笔為你收集整理的前端JS: 通过代码-看函数作用域this对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: @import注解使用
- 下一篇: 2017年html5行业报告,云适配发布