我使用Java的匿名函数,现在使用JavaScript,我仍然不了解一件事。
使用JavaScript,我们可能会有以下代码:
doSomething('omg',function(mark){
console.log(mark);
});
function doSomething(printthis,callback){
console.log(printthis);
callback();
}
所以我们通过' omg'和doSomething函数的匿名函数。
但是,参数/参数'在哪里标记'来自?我们如何通过这个匿名函数传递mark参数?我发誓我已经一次又一次地看到这一点,但我不知道mark参数的来源。
在哪儿?
答案 0 :(得分:2)
mark
参数来自callback()
的调用;但是,您没有指定任何参数,因此mark
将为undefined
。如果你写了callback(printthis + " in callback")
,那么你就会在控制台中收到"omg in callback"
。
// using document.write() so it shows up on the snippet. Don't do this at home. :)
doSomething('omg',function(mark){
document.write("<p>" + mark + "</p>");
});
function doSomething(printthis,callback){
document.write("<p>" + printthis + "</p>");
callback(printthis + " in callback");
}
答案 1 :(得分:0)
最好的方法是使用bind
,但请记住,this
需要设置,或者为空。
doSomething('omg',function(mark){
console.log(mark);
}.bind(null, 'test'));
function doSomething(printthis,callback){
console.log(printthis);
callback();
}
这也可以通过包装另一个匿名函数来实现。
doSomething('omg',(function(mark){
return function(){
console.log(mark);
}
})('test'));
function doSomething(printthis,callback){
console.log(printthis);
callback();
}
答案 2 :(得分:0)
您错过了如何将参数传递给用户定义的函数:
function doSomething(printThis, callback, context){
var c = context || this; // if you need to bind the context of callback
callback.call(c, printThis); // your callback is passed printThis
}
doSomething('omg', function(mark){
console.log(mark);
});
您实际上定义了传递给函数中用户定义函数的参数,该函数执行回调。