javascript - 對bind的疑問
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-06-12 09:31:41
0
4
773

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

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

曾经蜡笔没有小新
曾经蜡笔没有小新

全部回覆(4)
过去多啦不再A梦

是可以執行,但不能只針對這種情形,要是我要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());
阿神

這個就是設計模式的思想,return this.忘記叫什麼模式.
還有一個就是跟樓上的需求一樣了

this.do1().do2()

左手右手慢动作

bind 目的只是綁定函數上下文也就是函數內部的this指向,不能改變函數原來的行為。

這個範例中 handleClick 沒有回傳值,所以有木有return一樣,但是如果某個事件需要關心事件處理函數的回傳值呢?

例如 回傳 false 會 preventDefault() 等。

那開發的時候 handleClick 裡寫了個return false,結果卻不起作用,這就是傳說中的坑。

phpcn_u1582

你的範例中,bind 函數全部是副作用…對全是副作用(改 dom 啊,alert 啊,發請求啊之類)的函數,你 return 什麼都沒有意義。
最簡單的例子,需要 bind 後回傳值時:

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

這時內層的 return 就是必須的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板