看到并运行下面的代码,以为我理解闭包......怎么样#avatarUrl'在回调参数中也收到了#avatar'这也是函数参数。我知道这是常见的模式,但还不能得到它
var GitHubApi = require('github');
var github = new GitHubApi({
version: '3.0.0'
});
var getUserAvataWithCallback = function(user, callback) {
github.search.users({q: user}, function(err,res) {
if (err) { callback(err, null);}
else {
var avatarUrl = res.items[0].avatar_url;
callback(null, avatarUrl);
}
});
};
getUserAvataWithCallback('irom77', function(err,avatar) {
console.log('got url with callback pattern', avatar);
})
答案 0 :(得分:1)
传递给函数的参数的名称不需要是函数定义中的参数的名称,定义中的参数是将在给定函数的范围内初始化的变量的名称。参数声明将接收在函数调用的第二个位置传递的值(根据您提供的代码),您将能够使用该名称在范围内访问它。你可以:
function foo(arg1, arg2) {
console.log(arg1, arg2);
}
foo(true, true); // will output true, true
foo(0, 1); //will output 0, 1
foo('shikaka', 1); //will output "shikaka", 1
var bar = "shikaka";
foo(bar, "shikaka"); //will output "shikaka", "shikaka"
答案 1 :(得分:1)
因此,回调是javascript中的基础和整体概念,因此了解一些概念非常重要。看看这个例子:
// This is the function definition for "foo"
//here the callback argument refers to
//the second argument in the function call at
//the bottom which is a function
var foo = function(arg, callback) {
if(arg%2 != 0)
callback("arg is odd", arg)
else
callback(null, arg)
}
//Function call to foo
foo(2, function(err, num) {
if(err)
console.log(err)
else
console.log(num)
}
因此,在上面的示例中,您可以将函数调用视为具有两个参数的调用,即整数2和函数。
在函数定义中:
整数称为“arg”,该函数称为“回调”。
当执行回调(“arg为odd”,arg)时,调用该函数:
执行回调(null,arg)时,将使用以下函数调用该函数:
这里需要记住的重要一点是,在javascript中,函数可以作为参数传递给其他函数。进一步阅读here。