關(guān)于this的一個(gè)代碼片段

關(guān)于this的誤解:this指向函數(shù)自身

function foo(num) {
  console.log("foo: " + num);
  this.count++;
}

foo.count = 0;

var i;
for(i=0; i<10; i++) {
  if(i > 5) {
    foo(i);
  }
}
// foo被調(diào)用了多少次呢?
console.log(foo.count); // 0
  • foo被執(zhí)行了4次,但是foo.count仍然是0。這是因?yàn)閳?zhí)行foo.count=0時(shí),的確向函數(shù)對(duì)象foo添加了一個(gè)屬性count,但是函數(shù)內(nèi)部代碼this.count中的this并不是指向那個(gè)函數(shù)對(duì)象,所以雖然屬性名相同,根對(duì)象卻并不相同。
  • this.count++實(shí)際上創(chuàng)建了一個(gè)全局變量count,它的值為NaN。

改進(jìn)

function foo(num) {
  console.log("foo: " + num);
  this.count++;
}

foo.count = 0;

var i;
for(i=0; i<10; i++) {
  if(i > 5) {
    foo.call(foo, i); // 使用call改變this的指向
  }
}

console.log(foo.count);

function foo(num) {
  console.log("foo: " + num);
  foo.count++;
}

foo.count = 0;

var i;
for(i=0; i<10; i++) {
  if(i > 5) {
    foo(i);
  }
}

console.log(foo.count);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第3章 基本概念 3.1 語(yǔ)法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類(lèi)型 5種簡(jiǎn)單數(shù)據(jù)類(lèi)型:Unde...
    RickCole閱讀 5,489評(píng)論 0 21
  • this 關(guān)鍵字是 JavaScript 中最復(fù)雜的機(jī)制之一。它是一個(gè)很特別的關(guān)鍵字,被自動(dòng)定義在所有函數(shù)的作用域...
    后發(fā)而先制閱讀 395評(píng)論 0 0
  • 1 this初步 this 實(shí)際上是在函數(shù)被調(diào)用時(shí)發(fā)生的綁定,它指向什么完全取決于函數(shù)在哪里被調(diào)用。 1.1 對(duì) ...
    1e6c2b3901b0閱讀 216評(píng)論 0 0
  • this 什么是this,其實(shí)你可以理解為它類(lèi)似一個(gè)指針 在瀏覽器環(huán)境中,全局作用域下,this指的是window...
    hhooke閱讀 273評(píng)論 0 0
  • this是什么 在函數(shù)運(yùn)行時(shí),基于調(diào)用位置的條件自動(dòng)生成的內(nèi)部對(duì)象,可以理解為動(dòng)態(tài)綁定對(duì)象到this上。 需要強(qiáng)調(diào)...
    烈風(fēng)裘閱讀 536評(píng)論 0 0

友情鏈接更多精彩內(nèi)容