84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
看到大神在介紹this的時候第二個使用環境,原文在此:http://www.ruanyifeng.com/blo...這裡的物件o應該就是this?如果是的話為什麼這樣最不全等?
function test(){ console.log(this.x); } var o = {}; o.x = 1; o.m = test; console.log(o.m()); console.log(o===this);
輸出的分別是:1false
全域下this===window
在全域環境下執行console.log()this當然指向window了;this指向的是函數目前的執行環境
o.m()是隱式綁定this到o物件 全域作用域下this指向全域物件
要記住,另外一種呼叫方式func.call(context, x, m) 上面的兩種方式只是語法糖 可以透過「轉換程式碼」的方式如:
function test(){ console.log(this.x); }
等價於
function test(){ console.log(this.x); } test.call(undefined)
按理說印出來的 this 應該就是 undefined 了吧 但是瀏覽器裡有一條規則:
如果你傳的 context 就 null 或 undefined,那麼 window 物件就是預設的 context(嚴格模式下預設 context 是 undefined)因此上面的this對應的應該是 window。
全域下this===window
在全域環境下執行console.log()this當然指向window了;
this指向的是函數目前的執行環境
o.m()是隱式綁定this到o物件
全域作用域下this指向全域物件
要記住,另外一種呼叫方式func.call(context, x, m) 上面的兩種方式只是語法糖 可以透過「轉換程式碼」的方式如:
等價於
按理說印出來的 this 應該就是 undefined 了吧
但是瀏覽器裡有一條規則:
如果你傳的 context 就 null 或 undefined,那麼 window 物件就是預設的 context(嚴格模式下預設 context 是 undefined)
因此上面的this對應的應該是 window。