为什么我不能将函数直接传递给替换方法

Why can't I pass the function directly into replace method?

本文关键字:替换 方法 不能 函数 为什么      更新时间:2023-09-26

我根本无法理解为什么输出的第二行和第三行彼此不同:

alphabet_ASCII = '';
for (i=65; i<=90; i++) {
  alphabet_ASCII += i;
}
alphabet_ASCII += '<br>';
document.body.innerHTML += alphabet_ASCII;
document.body.innerHTML += 
  alphabet_ASCII.replace(/'d{2}/g, x=>String.fromCharCode(x));
document.body.innerHTML += 
  alphabet_ASCII.replace(/'d{2}/g, String.fromCharCode);

x=>String.fromCharCode(x)String.fromCharCode有什么区别?

因为String.fromCharCode接受多个参数,并且replace调用回调的不仅仅是您期望的一个参数: 它调用回调:

  • 所有匹配的文本
  • 任何捕获组的内容(如果有)
  • 发生此匹配的索引(偏移量)
  • 正在操作的整个字符串

更多关于 MDN 的信息。

因此,在你的第二个例子中,String.fromCharCode得到的论据比你的第一个例子多,并且尽其所能。在第一次回调时,String.fromCharCode 得到"65", 0, "6566676869707172737475767778798081828384858687888990",因此返回 "A'u0000'u0000"(因为第二个参数为 0,第三个参数无效)。在第二次传递时,它得到"66", 2, "6566676869707172737475767778798081828384858687888990"并返回"B'u0002'u0000",依此类推。