js 中多次bind的效果为什么会是这样?

这段代码为什么执行结果是abab不能理解。。。
就是这个“相当于”不理解啊,上面这个例子,是abbabc啊,说明第一次bind和并没有替换内部逻辑,纯粹就是第二次bind没有改变this的指向。
慕婉清6462132
浏览 723回答 2
2回答

慕侠2389804

把bbind到a上时,d就相当于d=function(){console.log("a")if(b){b()}}所以d再bind谁都没影响

婷婷同学_

d=a.bind(b);d();这里d()的意思是将a的this绑定到b,然后执行。因此执行输出肯定是a,b。因此a中的this()实际上就等于b().但是当b中运行时,this的类型就已经是不是function了,因此运行肯定是会报错的。e=d.bind(c);e();同样的道理,这里会首先执行d函数,然后执行c函数,但是在执行d的时候this就已经是undefined了,肯定就不会继续向下执行了,因此也就仅仅只执行了d函数,输出了a,b。修改代码如下:"usestrict";vara=function(){console.log("a")console.log('a:',typeofthis);if(typeofthis=='function'){this()}}varb=function(){console.log("b")console.log('b:',typeofthis);if(typeofthis=='function'){this()}}varc=function(){console.log("c")console.log('c:',typeofthis);if(typeofthis=='function'){this()}}vard=a.bind(b)vare=d.bind(c)d()e()你可以更加直观的查看到this的变化与输出结果的对比。aa:functionbb:undefinedaa:functionbb:undefined
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript