this 是 JavaScript 語言的一個關鍵字。app
它是函數運行時,在函數體內部自動生成的一個對象,只能在函數體內部使用。函數
function test() { this.x = 1; }
上面代碼中,函數 test 運行時,內部會自動有一個 this 對象可使用。this
1、this 的值是什麼
函數的不一樣使用場合,this 有不一樣的值。spa
總的來講,this 就是函數運行時所在的環境對象。code
2、this 的使用場景
一、做爲通常函數執行
二、做爲對象屬性執行
三、做爲構造函數執行
四、經過 call、apply、bind 調用
3、this 的判斷
1. 做爲通常函數執行時,this 指代全局對象
function test(){ this.x = 1; alert(this.x); } test(); // 1
2. 做爲對象屬性執行時,this 指代上級對象
function test(){ alert(this.x); } var o = {}; o.x = 1; o.m = test; o.m(); // 1
3. 做爲構造函數調用時,this 指代 new 出的對象
var x = 2; function test(){ this.x = 1; } var o = new test(); alert(x); // 2 alert(o.x); // 1
對於 new 的方式來講,this 被永遠綁定在了 o 上面對象
4. call、apply、bind 調用時,this 指代第一個參數
let a = {} let fn = function () { console.log(this) } fn.bind().bind(a)()
上述代碼中,無論咱們給函數 bind 幾回,fn 中的 this 永遠由第一次 bind 決定,因此結果永遠是 windowblog