扫码关注官方订阅号
var f = String.fromCharCode; for (var i = 65; i < 70; i++) { f = f.bind(0, i); } f(); //输出为 "ABCDE", 为什么?
chrome 截图如下:
学习是最好的投资!
最终相当于执行了String.fromCharCode(65, 66, 67, 68, 69),所以结果是ABCDE。为什么呢?这要从bind函数说起。
String.fromCharCode(65, 66, 67, 68, 69)
ABCDE
bind
bind的第一个参数是函数执行时的this的值,fromCharCode是一个静态方法,this是什么都无所谓,所以可以随便传。
this
fromCharCode
除了第一个参数外,bind还可以接受任意多个参数,这些参数在执行时会传给被绑定的方法。所以第一次循环结束后,相当于在fromCharCode上绑定了一个参数65;第二次循环结束后,又绑定了一个参数66(现在一共绑定了65、66 2个参数),以此类推,最终的f相当于在原来的fromCharCode上绑定了5个参数,所以得到的结果为ABCDE。
65
66
65、66
f
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
最终相当于执行了
String.fromCharCode(65, 66, 67, 68, 69)
,所以结果是ABCDE
。为什么呢?这要从bind
函数说起。bind
的第一个参数是函数执行时的this
的值,fromCharCode
是一个静态方法,this
是什么都无所谓,所以可以随便传。除了第一个参数外,
bind
还可以接受任意多个参数,这些参数在执行时会传给被绑定的方法。所以第一次循环结束后,相当于在fromCharCode
上绑定了一个参数65
;第二次循环结束后,又绑定了一个参数66
(现在一共绑定了65、66
2个参数),以此类推,最终的f
相当于在原来的fromCharCode
上绑定了5个参数,所以得到的结果为ABCDE
。