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

查看:239
本文介绍了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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆