javascript:为什么有些函数可以绑定和映射,而有些函数不能?

javascript:为什么有些函数可以绑定和映射,而有些函数不能?,javascript,Javascript,出于好奇: 老师教我如何使用快捷功能应用程序,如下所示: trim = Function.prototype.call.bind(String.prototype.trim) join = Function.prototype.call.bind(Array.prototype.join) 现在,我可以映射trim,但由于某种原因,我不能映射joinjoin将“”、“作为默认参数(分隔符),因此我应该可以,但它使用数组索引: > trim = Function.prototype.ca

出于好奇:

老师教我如何使用快捷功能应用程序,如下所示:

trim = Function.prototype.call.bind(String.prototype.trim)

join = Function.prototype.call.bind(Array.prototype.join)
现在,我可以映射
trim
,但由于某种原因,我不能映射
join
join
将“
”、“
作为默认参数(分隔符),因此我应该可以,但它使用数组索引:

> trim = Function.prototype.call.bind(String.prototype.trim)
call()
> [' a','b '].map(trim)
["a", "b"]
> join = Function.prototype.call.bind(Array.prototype.join)
call()
> [['a','b'],['c','d']].map(join)
["a0b", "c1d"]
为什么?

还有,如果我真的想要一个不同的分隔符呢?将它传递给
bind
不起作用,因为它是在现有参数前面加上的(在任何时候,我映射的列表中的一个元素)。然后它承担要连接的字符串的角色,如果有要分离的内容,则要连接的字符串将充当分隔符:

> joins = Function.prototype.call.bind(Array.prototype.join,';')
call()
> [['a','b'],['c','d']].map(joins)
[";", ";"]
我研究发现:


传递给map的函数接收3个参数。基本上地图是这样工作的

Array.prototype.map = function(f) {
  var result = [];
  for(var i = 0; i < this.length; i++) {
    result.push(f(this[i], i, this));
  }
  return result;
}
为了得到想要的结果,可以编写一个可以生成连接函数的函数。e、 g

function joinSep(separator) {
  return function(array) {
    return array.join(separator)
  }
}
var joins = joinSep(';');
[['a','b'],['c','d']].map(joins)

这回答了“为什么?”:嗯,
trim
忽略了它传递的参数,
join
没有。
function joinSep(separator) {
  return function(array) {
    return array.join(separator)
  }
}
var joins = joinSep(';');
[['a','b'],['c','d']].map(joins)