"usestrict";vara=function(){console.log("a")if(this){this()}}varb=function(){console.log("b")if(this){this()}}varc=function(){console.log("c")if(this){this()}}vard=a.bind(b)vare=d.bind(c)d()e()这段代码为什么执行结果是abab不能理解。。。"usestrict";vara=function(){console.log("a")lett=eval("this")if(this){this()t()}}varb=function(){console.log("b")lett=eval("this")if(this){this()t()}}varc=function(){console.log("c")lett=eval("this")if(this){this()t()}}varx=function(){console.log("a")lett=eval("this")if(b){b()t()}}vard=a.bind(b)vare=d.bind(c)varf=x.bind(c)e()f()就是这个“相当于”不理解啊,上面这个例子,是abbabc啊,说明第一次bind和并没有替换内部逻辑,纯粹就是第二次bind没有改变this的指向。
2 回答
婷婷同学_
TA贡献1844条经验 获得超8个赞
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
添加回答
举报
0/150
提交
取消