7

当我hi()()用双括号调用函数时,函数会显示hi输出,它也会给出错误提示,这hi不是函数。

<html>
    <head></head>
<script>

function hello()
{
    document.write("hello");
}
function hi()
{
    document.write("hi");
    return "hello";
}
hi()();
</script>
</html>

()()使用函数名是什么意思?

4

5 回答 5

13

hi如果返回一个函数而不是函数名,双括号会很有用,例如

function hi(){
    return hello;
}
hi()();

这大概就是本意。

于 2013-09-14T13:03:38.207 回答
11

将评估为函数的内容放在()后面将调用该函数。所以,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"();or的内容1232();

于 2013-09-14T13:13:37.497 回答
6

()() 表示调用一个函数,如果返回另一个函数,第二个括号将调用它。请参见下面的示例:

function add(x){
    return function(y){
        return x+y;
    }
}

添加(3)(4)

输出:7

在上述情况下,add(4) 将被调用以添加函数,add(3) 将被调用以返回函数。这里参数 x 的值为 3,参数 y 为 4。

请注意:我们使用括号进行函数调用。

于 2017-04-17T12:57:11.263 回答
4

此函数的返回值是一个字符串,它不是可调用对象。

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 小提琴:这里

如果您想在尝试此操作hello后立即调用函数:hi

 function hi()
    {
        document.write("hi");
        return hello; //<-- no quote needed
        // In this context hello is function object not a string
    }
于 2013-09-14T13:05:05.210 回答
0

eval()即使它是字符串, 您也可以使用它来执行它:eval(hi()+'()');

于 2013-09-14T13:18:18.597 回答