请解释这段 js 代码

var f = String.fromCharCode;
for (var i = 65; i < 70; i++) {
  f = f.bind(0, i);
}
f(); //输出为 "ABCDE", 为什么?

chrome 截图如下:

图片描述

阅读 1.7k
1 个回答

最终相当于执行了String.fromCharCode(65, 66, 67, 68, 69),所以结果是ABCDE。为什么呢?这要从bind函数说起。

bind的第一个参数是函数执行时的this的值,fromCharCode是一个静态方法,this是什么都无所谓,所以可以随便传。

除了第一个参数外,bind还可以接受任意多个参数,这些参数在执行时会传给被绑定的方法。所以第一次循环结束后,相当于在fromCharCode上绑定了一个参数65;第二次循环结束后,又绑定了一个参数66(现在一共绑定了65、66 2个参数),以此类推,最终的f相当于在原来的fromCharCode上绑定了5个参数,所以得到的结果为ABCDE

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题