关于this(—)

this 关键字是 JavaScript 中最复杂的机制之一。它是一个很特别的关键字,被自动定义在

所有函数的作用域中。但是即使是非常有经验的 JavaScript 开发者也很难说清它到底指向

什么。this 实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用。

为什么要用this

1.this可以根据不同的上下文对象,调整相同的函数。

2.this可以隐式传递一个对象的引用。

误解

1. this 并不像我们所想的那样指向函数本身.

function foo(num) {

console.log( "foo: " + num );

// 记录 foo 被调用的次数

this.count++;

}

foo.count = 0;

var i;

for (i=0; i<10; i++) {

if (i > 5) {

foo( i );

}

}

// foo: 6

// foo: 7

// foo: 8

// foo: 9

// foo 被调用了多少次?

console.log( foo.count ); // 0 -- WTF?

2.它的作用域

this 指向函数的作用域。这个问题有点复杂,因为在某种情况下它是正确的,但是在其他情况下它却是错误的。

function foo() {

var a = 2;

this.bar();

}

function bar() {

console.log( this.a );

}

foo(); // ReferenceError: a is not defined

this 是在运行时进行绑定的,并不是在编写时绑定,它的上下文取决于函数调

用时的各种条件。this 的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。

当一个函数被调用时,会创建一个活动记录(有时候也称为执行上下文)。这个记录会包

含函数在哪里被调用(调用栈)、函数的调用方法、传入的参数等信息。this 就是记录的

其中一个属性,会在函数执行的过程中用到。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,632评论 19 139
  • this全面解析 调用位置 在理解 this 的绑定过程之前,首先要理解调用位置:调用位置就是函数在代码中被调用的...
    后发而先制阅读 3,161评论 1 0
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,385评论 2 17
  • this作为全局对象window的几种情况 作为函数调用的this 作为内部嵌套函数的this 在setTimeo...
    羞涩的涩阅读 4,383评论 0 0
  • 从学习前端开始已经大概要两个月了,这几天突然发现this并没有想想中这么简单,之前很长一段时间对于this的认识停...
    悲欢自饮丶阅读 2,350评论 0 0