前言
一个东西既然存在必有其存在的价值
this为何存在
先来个例子自行体会
// this传递
function foo() {
console.log('name:' + this.name);
}
var me = {
name: 'me'
};
foo.call(me);
// 参数传递上下文
function foo(ctx) {
console.log('name:' + ctx.name);
}
var me = {
name: 'me'
};
foo(me);
误区
- 觉得this指向函数自身
常见的函数引用自身无非就俩情况,一则递归,二则事件触发之后解绑
函数内部引用自身一般通过函数标识符,若是匿名函数那么只能通过arguments.callee(弃用了,因为arguments太大,递归每次生成副本导致性能差),所以建议都具名 - 它的作用域
this在任何情况下都不指向函数的词法作用域。在JS内部,作用域和对象很像,可见的标识符都是它的属性,不过这个"对象"无法通过代码访问,它存在于引擎内部
this是什么
this是运行时绑定的,它的上下文取决于函数调用时的各种条件。this的绑定和函数声明的位置无关,只取决于函数调用方式
当一个函数被调用时会创建一个活动记录也称为执行上下文。此记录包含函数在哪调用(调用栈)、传入的参数、函数的调用方法等,this就是该记录的一个属性
网友评论