function bind(fn, obj) {
return function() {
return fn.apply(obj, arguments);
}
}
我的问题是:
1.能不能写成像下面这样
function bind(fn, obj) {
return fn.apply(obj, arguments);
}
2.如果不能,是为什么,这样写的话与第一段代码有什么区别,会造成什么问题
3.能不能写个栗子举例一下
谢谢咯
function bind(fn, obj) {
return function() {
return fn.apply(obj, arguments);
}
}
我的问题是:
1.能不能写成像下面这样
function bind(fn, obj) {
return fn.apply(obj, arguments);
}
2.如果不能,是为什么,这样写的话与第一段代码有什么区别,会造成什么问题
3.能不能写个栗子举例一下
谢谢咯
1.肯定不能啊,前者返回的是一个function,后者返回的是fn执行后的返回的结果。
2.我们知道bind是用来绑定this指向后生成一个新的函数来调用的,即
var a = 4;
function fn(){
console.log(this.a+1);
}
var obj = {a:1};
fn();//5
var newFn = fn.bind(obj);
newFn();//2
如果用你说的那两种bind封装:
前者
var newFn = bind(fn,obj);
newFn();//2 可以得到答案
后者
bind(fn,obj);//2 一bind就执行了函数得到结果了。
对比一下,题主觉得哪个更符合Function.prototype.bind呢
附带bind的实现参考(在页面底下)
https://developer.mozilla.org...
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
不能
因为你这个样子,就等于直接执行了fn,而不是生成一个可执行的函数。
栗子:
错误栗子:
新鲜可食的栗子: