我正在创建一个lambda函数,它使用具体的params执行第二个函数.这个代码适用于Firefox,但不适用于Chrome,它的检查器显示一个奇怪的错误,Uncaught TypeError: Illegal invocation.我的代码出了什么问题?
var make = function(callback,params){
callback(params);
}
make(console.log,'it will be accepted!');
Run Code Online (Sandbox Code Playgroud) 您好我正在阅读"JavaScript:权威指南"第6版,并在9.1 Classes和Prototypes中尝试了其中一个示例.
function range (from, to) {
var r = Object.create(range.methods);
r.from = from;
r.to = to;
return r;
}
range.methods = {
includes: function(x) {
return this.from <= x && x <= this.to;
},
foreach: function(f) {
for(var x = Math.ceil(this.from); x <= this.to; x++)
f(x);
},
toString: function() {
return "(" + this.from + "..." + this.to + ")";
}
};
Run Code Online (Sandbox Code Playgroud)
将其加载到控制台会引发错误
未捕获的TypeError:非法调用class.js:31.range.methods.foreach class.js:31(匿名函数)
我想foreach方法的意图是将函数名称作为参数传递
var r = range(1, 3);
r.foreach(console.log);
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决此错误?
我有javascript代码,如果它在浏览器中运行会引发警报,但是当我运行单元测试时我不想提出警报.
我试着用一条线来解决这个问题
if( allowAlerts === false ){
alert = console.log;
}
Run Code Online (Sandbox Code Playgroud)
但是当我跑的时候
alert("This bad thing happened");
Run Code Online (Sandbox Code Playgroud)
我回来了
TypeError: Illegal invocation
Run Code Online (Sandbox Code Playgroud)
直接重新分配警报是一个kludgey解决方案,我可以通过其他方式轻松解决问题,但我以前从未遇到过非法调用错误,并希望有人能够解释它的含义.