关于this的一个代码片段

关于this的误解:this指向函数自身

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被调用了多少次呢?
console.log(foo.count); // 0
  • foo被执行了4次,但是foo.count仍然是0。这是因为执行foo.count=0时,的确向函数对象foo添加了一个属性count,但是函数内部代码this.count中的this并不是指向那个函数对象,所以虽然属性名相同,根对象却并不相同。
  • this.count++实际上创建了一个全局变量count,它的值为NaN

改进

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);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 10,722评论 0 21
  • this 关键字是 JavaScript 中最复杂的机制之一。它是一个很特别的关键字,被自动定义在所有函数的作用域...
    后发而先制阅读 2,875评论 0 0
  • 1 this初步 this 实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用。 1.1 对 ...
    1e6c2b3901b0阅读 1,490评论 0 0
  • this 什么是this,其实你可以理解为它类似一个指针 在浏览器环境中,全局作用域下,this指的是window...
    hhooke阅读 1,724评论 0 0
  • this是什么 在函数运行时,基于调用位置的条件自动生成的内部对象,可以理解为动态绑定对象到this上。 需要强调...
    烈风裘阅读 3,375评论 0 0

友情链接更多精彩内容