当我用双括号调用函数hi()()
时,函数会显示hi
输出,并且它也会显示错误,hi
不起作用。
<html>
<head></head>
<script>
function hello()
{
document.write("hello");
}
function hi()
{
document.write("hi");
return "hello";
}
hi()();
</script>
</html>
将()()
与函数名称一起使用是什么意思?
答案 0 :(得分:8)
如果hi
返回了函数而不是其名称,则双括号将非常有用,例如
function hi(){
return hello;
}
hi()();
这可能是意图的原因。
答案 1 :(得分:6)
将()
置于评估函数的内容之后将调用该函数。因此,hi()
调用函数hi
。假设hi
返回一个函数,那么hi()()
将调用该函数。
例如:
function hi(){
return function(){return "hello there";};
}
var returnedFunc = hi(); // so returnedFunc equals function(){return "hello there";};
var msg = hi()(); // so msg now has a value of "hello there"
如果hi()
未返回任何内容,则hi()()
会产生错误,类似于输入"not a function"();
或1232();
之类的内容。
答案 2 :(得分:3)
此函数的返回值是一个不是可调用对象的字符串。
function hi()
{
document.write("hi");
return "hello"; // <-- returned value
}
但是如果你想多次调用这个函数,你可以使用for循环或其他东西。
hi()()的示例:
function hi(){
return function(){ // this anonymous function is a closure for hi function
alert('some things')
}
}
JS小提琴:here
如果您想在hello
之后立即致电hi
,请尝试以下操作:
function hi()
{
document.write("hi");
return hello; //<-- no quote needed
// In this context hello is function object not a string
}
答案 3 :(得分:1)
()()表示调用一个函数,如果返回另一个函数,则第二个括号将调用它。请在下面找到示例:
function add(x){
return function(y){
return x+y;
}
}
加(3)(4)
输出:7
在上面的情况下,add(4)将被调用为add函数,add(3)将被调用为返回函数。这里参数x的值是3,参数y是4.
请注意:我们使用括号进行函数调用。
答案 4 :(得分:0)
您可以使用eval()
来执行它,即使它是字符串:eval(hi()+'()');