前端JS: 通过代码-看函数作用域this对象
生活随笔
收集整理的這篇文章主要介紹了
前端JS: 通过代码-看函数作用域this对象
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
函數中的this對象,指向的是調用該函數的對象;誰調用它,它的作用域中的this就指向誰;
每一個具體的問題,都值得思考這個細節點: 1.以下輸出結果是:
var obj={name:'test',output:function(){console.log("1");}}console.log(obj.output());var outputFunc=obj.output;outputFunc(); 復制代碼console: 1 1
2.以下輸出結果是:
obj={name:'test',output:function(){return this.name;}}console.log(obj.output());var outputFunc=obj.output;outputFunc(); 復制代碼console: test, ""
3.以下輸出結果是:
obj={count:1,output:function(){ console.log(this);return this.count;}}console.log(obj.output());var outputFunc=obj.output;outputFunc(); 復制代碼4.請判斷以下打印輸出結果是什么?
function a(){function b(){console.log(this);}console.log(this);b();}a();console.log(a);console.log(b);分析: - 首先function 關鍵字申明定義一個函數a;在函數a中申明定義一個函數b();并且在函數a();中執行b(); - 還是牢記一點,對于函數中的this對象,誰調用該函數,函數中的this對象就指向誰;所以當在瀏覽器console中執行以上代碼時,a()默認是window對象調用;即:可以理解為window.a(); -根據以上,第五行中的console.log(this);打印結果應該是window對象;javascript語言是單線程執行;緊接著執行同步代碼b();相當于是執行了a()函數作用域中的this.b();所以第三行中的console.log(this);打印結果應該也是window對象; - 第九行console.log(a);相當于執行了console.log(window.a); function 關鍵字申明定義了一個函數a;所以打印結果應該為一個函數對象:f a(){function b(){console.log(this);}console.log(this);b();}- 第十行:console.log(b);相當于執行了console.log(window.b);由于在window對象中沒有申明定義b;所以應該打印結果為 b is not defined ; 復制代碼console結果如下:
轉載于:https://juejin.im/post/5cc3dadc51882525095bbeae
總結
以上是生活随笔為你收集整理的前端JS: 通过代码-看函数作用域this对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: @import注解使用
- 下一篇: 使用Fiddler进行Web接口测试