登陆

javascript - 对bind的疑问

我在看JS高级程序时候,第22章提及了bind

箭头指出的地方为什么要return? 我并不是很能理解,所以当我删除了箭头指出的return的时候,事件也能执行啊.

# JavaScript
曾经蜡笔没有小新曾经蜡笔没有小新1595 天前333 次浏览

全部回复(4)我要回复

  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-12 09:33:41

    是可以执行,但不能只针对这种情形,要是我要bind的fn是一个需要返回值的函数呢?

    function bind(fn, context){
        return function(){
            return fn.apply(context, arguments);
        }
    }
    function bindNoReturn(fn, context){
        return function(){
             fn.apply(context, arguments);
        }
    }
    var name = 'global';
    function fn(){
        return this.name;
    }
    var bfn = bind(fn, {name:"sf"});
    var bfnNR = bindNoReturn(fn,{name:'return'});
    console.log(bfn());
    console.log(bfnNR());

    回复
    0
  • 阿神

    阿神2017-06-12 09:33:41

    这个就是设计模式的思想,return this.忘记叫什么模式.
    还有一个就是和楼上的需求一样了

    this.do1().do2()

    回复
    0
  • ringa_lee

    ringa_lee2017-06-12 09:33:41

    bind 目的只是绑定函数上下文也就是函数内部的this指向,不能改变函数原来的行为。

    这个例子中 handleClick 没有返回值,所以有木有return一样,但是如果某个事件需要关心事件处理函数的返回值呢?

    例如 返回 false 会 preventDefault() 等。

    那开发的时候 handleClick 里写了个return false,结果却不起作用,这就是传说中的坑。

    回复
    0
  • phpcn_u1582

    phpcn_u15822017-06-12 09:33:41

    你的示例中,bind 函数全部是副作用…对全是副作用(改 dom 啊,alert 啊,发请求啊之类)的函数,你 return 什么都没有意义。
    最简单的例子,需要 bind 后返回值时:

    newFn = oldFn.bind(this)
    // ...
    var x = newFn() // undefined

    这时内层的 return 就是必须的。

    回复
    0
  • 取消回复发送