var f = String.fromCharCode;
for (var i = 65; i < 70; i++) {
f = f.bind(0, i);
}
f(); //输出为 "ABCDE", 为什么?
chrome 截图如下:
var f = String.fromCharCode;
for (var i = 65; i < 70; i++) {
f = f.bind(0, i);
}
f(); //输出为 "ABCDE", 为什么?
chrome 截图如下:
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
最终相当于执行了
String.fromCharCode(65, 66, 67, 68, 69)
,所以结果是ABCDE
。为什么呢?这要从bind
函数说起。bind
的第一个参数是函数执行时的this
的值,fromCharCode
是一个静态方法,this
是什么都无所谓,所以可以随便传。除了第一个参数外,
bind
还可以接受任意多个参数,这些参数在执行时会传给被绑定的方法。所以第一次循环结束后,相当于在fromCharCode
上绑定了一个参数65
;第二次循环结束后,又绑定了一个参数66
(现在一共绑定了65、66
2个参数),以此类推,最终的f
相当于在原来的fromCharCode
上绑定了5个参数,所以得到的结果为ABCDE
。