1. 程式人生 > 其它 >javascript中關於this的概念理解

javascript中關於this的概念理解

技術標籤:概念理解javascriptnode.js

this 繫結規則

要了解this的繫結規則之前,首先要了解的是this是什麼?
this是一種繫結,要找到this繫結的物件:就是要 尋找 “函式被呼叫的位置”並不是宣告的位置。
this有四條繫結規則

  • 預設繫結
  • 隱式繫結
  • 顯式繫結
  • new繫結

這其中預設繫結、顯示繫結、new繫結非常好理解,這裡著重要理解的是隱式繫結,因為回撥函式的時候常常會存在"隱式丟失"。來看下面的例子

var x = 4;
var obj = {
    x: 3,
    bar: function () {
        var x = 2;
        setTimeout(function () {
            console.log(x); //----2
            console.log(this.x); //----3
        }, 1000);
        console.log(this.x) // --- 1 這個代表執行順序
    }
}
obj.bar();
//這裡兩個打印出來的x分別是:
// 3
// 2
// 4

先來看一下程式碼執行的過程
呼叫obj.bar()時,計時器setTimeout執行一秒後將回調函式放入事件佇列,繼續執行程式碼輸出列印第一個 x 的值。接著瀏覽器迴圈事件佇列執行回撥函式,列印第二個 x 和第三個 x 。

第一個 x 是通過obj找到的barthis繫結的是obj,所以打印出obj中的 3 。
第二個 x 是通過 閉包 得到的值為 2 。
第三個 x 是通過回撥函式的執行,此時的執行環境或者說函式的呼叫位置已經不在obj中了,而全域性作用域,this所繫結的就是window(實際上setTimeout就是window.setTimeout( ))所以這裡打印出的是 4 。