如何将console.log作为参数传递给我的JavaScript函数?

前端之家收集整理的这篇文章主要介绍了如何将console.log作为参数传递给我的JavaScript函数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在下面的代码中,我可以使用print代替console.log,程序可以正常运行.但是我希望使用console.log但是我得到了

Illegal invocation

在运行时

function forEach(array,action) {
    for (var i=0; i<array.length; i++) 
        action(array[i]);
}

forEach(["blah","bac"],console.log);

解决方法

通常,您无法将方法直接传递给Javascript中的回调.这是在函数调用的点上绑定的,这取决于你调用它的形式,并且没有方法自动绑定(比如,例如,Python)
//does not work.
var obj = {
    x: 17,f: function(){ return this.x; }
};

//inside doSomething,f forgets its "this" should be obj
doSomething( obj.f )

在这些情况下,可以使用Function.prototype.bind(或您选择的库中的类似函数,因为IE中不存在绑定< = 8)

//works (for normal methods - see next bit for console.log in particular)
var obj = {
    x: 17,f: function(){ return this.x; }
};

doSomething( obj.f.bind(obj) )

不幸的是,对于console.log来说,这并不总是足够的.由于它不是IE中的实际函数(它是一个邪恶的宿主对象),你不能在该浏览器上使用bind,apply和call方法,因此唯一的解决方法是回退到将函数包装在匿名函数

doSomething( function(x){
    return console.log(x);
});

由于在匿名函数中包装console.log很长并且对于类型I很烦人,因此在我开发和调试时通常会添加以下全局函数

function log(message){ return function(x){
    return console.log(message,x);
};};

forEach(['asd','zxc'],log('->'));
原文链接:https://www.f2er.com/js/156445.html

猜你在找的JavaScript相关文章