function bind(fn, obj) { return function() { return fn.apply(obj, arguments); }}
我的问题是:
1.能不能写成像下面这样
function bind(fn, obj) { return fn.apply(obj, arguments);}
2.如果不能,是为什么,这样写的话与第一段代码有什么区别,会造成什么问题
3.能不能写个栗子举例一下
巴扎黑2017-03-06 13:17:51
1.不能
2.因为你这个样子,就等于直接执行了fn,而不是生成一个可执行的函数。
3.栗子:
错误栗子:
function bind(fn, obj) { return fn.apply(obj, arguments);}function func(){ console.log(this.a);}// 期望结果是 bind(func, { a:1 })() 输出1bind(func, { a:1 }); // 直接输出1
新鲜可食的栗子:
Function.prototype.bind = Function.prototype.bind || function bind(context, ...args){ let fn = this; return function(...newArgs){ fn.apply(context, [].concat(args, newArgs)); }}