4种调用方式
this具体干了什么 this是为了得到当前的执行环境,在什么执行环境中运行就指向哪里。 由于函数可以在不同的运行环境执行,所以需要有一种机制,能够在函数体内部获得当前的运行环境(context)。所以, this 就出现了,它的设计目的就是在函数体内部,指代函数当前的运行环境。
在es5种this有四种指向 第一种、
var f = function () {};
var obj = { f: f };
f()
obj.f()
第二种
var f = function () {
console.log(this.x);
}
var x = 1;
var obj = {
f: f,
x: 2,
};
f()
obj.f()
第三种
var a = 10;
var foo = {
a: 20,
fn: function(){
console.log(this.a);
function foo () {
console.log(this)
}
foo()
}
};
var bar ={
a: 30
}
foo.fn.apply();
foo.fn.apply(foo);
foo.fn.apply(bar);
foo.fn.call(bar);
foo.fn.bind(bar)();
foo.fn.call(1);
如果不传,或者传null,指向window,如果是原始包装对象,会指向原始包装对象如=> Number{1}
第四种
function Foo () {
console.log(this)
}
var fn = new Foo()
fn
优先级 默认 < 隐式 < 显式 < new
扩展 箭头函数和普通函数的区别 1,箭头函数指向和普通函数指向不同,箭头函数this指向父级的父级 2,隐式绑定,显式绑定对箭头函数无效 3,箭头函数拿不到arguments 4,不能new 箭头函数
有空在写
|