也许我的问题对你来说显得很愚蠢......不幸的是,我没有在关于回调的教程中找到答案。请帮帮我。
我想弄清楚
之间有什么不同1。)
function name ( input, cb )
和
2。)
function name ( input, cb() )
通过
cb() {
...
}
在示例2中生成括号的内容是什么?)?我猜,它与synchrone / asynchrone javascript有关。请帮我理解后果。
这是我的工作代码:
if(T.get('statuses/show/' + tweet.id_str, { include_my_retweet:true }, iRT) === true){ //iRT = I have retweeted
console.log('Not retweeted. ');
}
这是我的工作代码:
if(T.get('statuses/show/' + tweet.id_str, { include_my_retweet:true }, iRT()) === true){ //iRT = I have retweeted
console.log('Not retweeted. ');
}
这是我的回归功能:
return( noRetweet() );
function noRetweet() {
return true;
}
答案 0 :(得分:1)
目前尚不清楚你要做的是函数调用还是函数定义。
函数调用
如果是函数调用,则function
关键字不应该在此处。函数f
的调用方式如下:f(arg)
;
在第一种情况下,函数name
将函数cb
作为第二个参数。然后它可以随时回调这个函数 - 或者随心所欲地做任何事情。
在第二种情况下,您首先直接调用cb
(()
用于什么,您也可以使用参数调用它,即name(input, cb(arg))
)以及此结果call(不是函数本身)作为第二个参数传递给name
。
name(input, cb());
大致相当于:
var tmpResult = cb();
name(input, tmpResult);
功能定义
如果是函数定义,则缺少函数体。函数定义如下。
function f(arg){
// What happens when the function is called.
}
在这种情况下,第二种情况无效。这是一个语法错误,并不意味着什么。
修改强>
在您添加问题后,您的if
应该可以正常使用。如果true
实际上取决于T.get
函数的结果。正如我之前所说的,在第一种情况下,你给T.get
函数iRT
,在第二种情况下给出结果。你应该看看正是期待T.get
并给它提供正确的参数(我怀疑它是iRT
的结果,但不知道这些函数的作用,我们只能猜测)。
答案 1 :(得分:0)
一般的想法是当你调用你的函数时,你的参数可以是他们想要的任何东西,只要它们产生结果。但是,在定义函数时,参数必须是变量。
下面,您可以看到我使用单独的参数定义每个函数,但是当我调用它时,我可以使用add()
作为参数,因为它会产生一个可以用作参数的结果getNumbers()
。
function add (x1, x2) {
return x1 + x2;
}
function getNumbers (x3, x4) {
return x3 + x4;
}
document.getElementById("math").innerHTML = getNumbers(3, add(1,2));
<div id="math"></div>