各浏览器对apply第二个参数的实现差异
每个函数都有个apply方法,该方法有两个作用:
1,改变函数的执行上下文(第一个参数非null,undefined)。
2,执行/调用该函数。
apply方法第二个参数一般认为被实现为数组,见经典的《javascript权威指南-第五版》中章节8.6.4,145页:
"apply()方法和call()方法相似,只不过要传递给函数的参数是由数组指定的:"
和641页关于Function.apply中提到args为一个数组。
?
权威指南中这个说法不太严谨,甚至自相矛盾。因为apply的第二个参数可以是arguments,而arguments并非数组。关于arguments非数组在权威指南章节8.2.2中提到。下面分别测试下
1var obj = {0:'zero',1:'one',length:2,constructor:Array}2function fun(){3????alert(arguments[0]);4}5fun.apply(null,obj);即使obj看起来已经很象一个数组了,但除了Opera正常运行,仍然欺骗不了IE6/7/8/Firefox/Chrome/Safari,看来只有IE9/Opera与众不同。