什么是“add()();”用JavaScript表示?

时间:2012-12-21 14:54:09

标签: javascript

我通过不同地调用i函数为add获取不同的值。有人能解释一下这里发生了什么吗?

var i = 0;
var add = function() {
    ++i;
    return function() {
        i++;
        return function() {
            i++;
            add();
        }
    }
 };
add(); // i = 1;
add()(); // i = 2;        
add()()(); // i = 4;

5 个答案:

答案 0 :(得分:4)

函数add返回一个函数。此函数返回另一个函数。

所以:

add(); // Executes add, which returns a function.
add()(); // Execute the function returned by add.
add()()(); // Execute the function returned by the function returned by add

每个函数只会将i值加1。这解释了i值。

答案 1 :(得分:1)

您的add函数返回一个函数。所以当你这样称呼时:

add();

会发生什么,代码(++i)执行并返回一个函数。您不对该功能执行任何操作,但可以。你可以执行它:

add()();

这将运行++i,返回一个函数,运行该函数(运行i++)并返回另一个函数(因为该内部函数也返回一个函数。

等等。您的函数正在返回其他函数,因此每当您向调用追加另一个()时,您正在执行的函数就是执行正在返回的函数。

答案 2 :(得分:1)

您正在添加添加

的功能

仅拨打

add()

执行该功能,i增加一个// 1

致电时

add()()

add返回的函数也会被执行,因此也会增加 i乘以2 // 2

add()()()

调用返回的函数add,返回函数返回的函数, 也在其中调用add, 因此将i增加4

但是,我将您发布的代码略微不正确,值应为

add() //i = 1
add()() // i = 3
add()()() //i = 7

答案 3 :(得分:0)

add()内,会返回一个新函数。

因此,调用add()()将首先执行add()。之后,add()返回的函数将被执行

答案 4 :(得分:0)

在javascript中“()”是函数调用操作符。所以每次调用“()”时,它都会尝试在此运算符之前调用该函数。在您的情况下,分配一个函数来添加。让我为每个函数分配一个名称,这样就很容易理解。

var i = 0;
var add = function one() {
++i;
return function two() {
    i++;
    return function three() {
            i++;
            add();
        }
    }
};

// This will execute function one 
// and return function two.
add();   

// This will execute function one and two, 
// return function three
add()(); 

// This will execute function one, two, three,
// return function two. Why?
// Because in function three, we call add() which will execute
// function one and return function two as I mentioned above.
add()()();

现在让我们看看你是否真的理解函数调用。

var i = 0;
var add = function one() {
i++;
return function two() {
    i++;
    return function three() {
            i++;
        }
    }()
};

我删除函数three中的函数add()以避免无限循环,并在函数二之后添加“()”。 那么如果我们现在调用add()呢?

// This will execute function one and return function two, 
// function two will invoke itself because of "()" at the end 
// I added and return function three. So call add() will 
// execute function one and function two, return function three.
// So i = 2 in this case.
add();

你可以整天玩这些函数调用,直到你对它有信心。