搜尋

首頁  >  問答  >  主體

javascript - 對bind的疑問

我在看JS高階程式時候,第22章提及了bind

#箭頭指出的地方為什麼要return? 我並不是很能理解,所以當我刪除了箭頭指出的return的時候,事件也能執行啊.

曾经蜡笔没有小新曾经蜡笔没有小新2763 天前809

全部回覆(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
  • 取消回覆