javascript - js 中多次bind的效果为什么会是这样?
本文介绍了javascript - js 中多次bind的效果为什么会是这样?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
<script>
"use strict";
var a=function(){
console.log("a")
if(this){
this()
}
}
var b=function(){
console.log("b")
if(this){
this()
}
}
var c=function(){
console.log("c")
if(this){
this()
}
}
var d=a.bind(b)
var e=d.bind(c)
d()
e()
</script>
这段代码为什么执行结果是abab不能理解。。。
<script>
"use strict";
var a=function(){
console.log("a")
let t=eval("this")
if(this){
this()
t()
}
}
var b=function(){
console.log("b")
let t=eval("this")
if(this){
this()
t()
}
}
var c=function(){
console.log("c")
let t=eval("this")
if(this){
this()
t()
}
}
var x=function(){
console.log("a")
let t=eval("this")
if(b){
b()
t()
}
}
var d=a.bind(b)
var e=d.bind(c)
var f=x.bind(c)
e()
f()
</script>
就是这个相当于不理解啊,上面这个例子,是abbabc啊,说明第一次bind和并没有替换内部逻辑,纯粹就是第二次bind没有改变this的指向。
解决方案
把 b bind 到 a 上时,d 就相当于
d = function() {
console.log("a")
if(b){
b()
}
}
所以 d 再 bind 谁都没影响
这篇关于javascript - js 中多次bind的效果为什么会是这样?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文