匿名职能 - 我常年的承办人

时间:2015-01-05 01:33:38

标签: javascript node.js

我使用Java的匿名函数,现在使用JavaScript,我仍然不了解一件事。

使用JavaScript,我们可能会有以下代码:

doSomething('omg',function(mark){
    console.log(mark);
});

function doSomething(printthis,callback){
    console.log(printthis);
    callback();
}

所以我们通过' omg'和doSomething函数的匿名函数。

但是,参数/参数'在哪里标记'来自?我们如何通过这个匿名函数传递mark参数?我发誓我已经一次又一次地看到这一点,但我不知道mark参数的来源。

在哪儿?

3 个答案:

答案 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();
}

jsfiddle

这也可以通过包装另一个匿名函数来实现。

doSomething('omg',(function(mark){
    return function(){
        console.log(mark);
    }
})('test'));

function doSomething(printthis,callback){
    console.log(printthis);
    callback();
}

jsfiddle

答案 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);
});

您实际上定义了传递给函数中用户定义函数的参数,该函数执行回调。