非法调用是指在调用函数时使用了错误的参数或者错误的方式。例如,给出了错误的对象或者没有正确传递参数。
在给出的示例中,使用了addEventListener.call(xhr, "readystatechange", callback)这样的调用方式,这是错误的。addEventListener是EventTarget对象的方法,不能使用.call()来调用。
正确的方法是直接在xhr对象上调用addEventListener方法,如下所示:
xhr.addEventListener("readystatechange", callback);
这样就可以将readystatechange事件与callback函数绑定起来了。