Javascript中this指向及绑定规则

1.this在不同运行环境指向对象不同

总结:在全局作用域中,Node运行环境下this指向的是空对象,而在浏览器中其指向的是window对象。

2.函数被调用方式的不同会导致this指向也不同

总结:我们发现,使用不同方式去调用同一个函数,其输出的this是不同的,其涉及到this的绑定规则。(ps:第13行末尾加多个括号就是为了调用func被绑定新的this后的函数,因为bind方式调用函数只能给函数绑定this而不能指向该函数,这个与call,apply不同)

3.this的绑定规则

1.默认绑定规则

 可以发现,直接函数名加上括号调用该函数打印出来的this就是window,这就说明this默认被绑定为window,那也说明默认情况下内部是通过window对象来调用函数的。

注意:在Node环境下是没有window对象的,不可以用window.函数名方式调用函数的。

 2.隐式绑定规则

 可以发现,通过对象名.函数名的方式调用函数,该函数绑定的this就是该对象,上述将func引用赋值给变量info,再通过函数名()方式调用该函数,实际上又是默认绑定this为window。

3.显示绑定规则-call、bind和apply

可以发现,通过call、apply方式调用函数可以为其绑定this,绑定this的同时还会执行func的函数体 。

 可以发现,bind方式也可以给函数绑定this,但是它不会执行函数体而是返回一个函数,可以使用变量(如temp)接收该返回的函数,然后调用它。

4.new绑定规则

new绑定规则实际上和java里面通过new关键字创建某个类的实例对象一样,new的时候赋值给谁,那么this指向的就是谁。

 4.setTimeout中的this指向

 可以发现,在setTimeout()的括号内的参数是一个函数,该函数会被以默认绑定方式被执行,因此this依然指向的是window对象。

个人总结: 在未使用bind函数给函数绑定this情况下,如果是通过 函数名() 方式调用一个函数,实际上就是使用了默认绑定,该函数的this指向window。

PS:写文章初衷就是复习所学知识,如文章有误,希望大佬指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值