什么是;添加()&引用;用JavaScript是什么意思?

什么是;添加()&引用;用JavaScript是什么意思?,javascript,Javascript,通过调用不同的add函数,我得到了I的不同值。有人能解释一下这里发生了什么吗 var i = 0; var add = function() { ++i; return function() { i++; return function() { i++; add(); } } }; add(); // i = 1; add()(); // i = 2; add

通过调用不同的
add
函数,我得到了
I
的不同值。有人能解释一下这里发生了什么吗

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

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

因此:


每个函数只向
i
值添加1。这解释了
i
值。

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

因此:

每个函数只向
i
值添加1。这解释了
i
值。

add()
中返回一个新函数

因此,调用
add()()
将首先执行
add()
。之后,将在
add()
内部执行
add()
返回的函数,并返回一个新函数


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

您的
add
函数返回一个函数。所以当你称之为:

add();
执行代码(
++i
)并返回函数。你不能用这个函数做任何事情,但你可以。您可以执行它:

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


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

您的
add
函数将返回一个函数。因此,当您调用此函数时:

add();
执行代码(
++i
)并返回一个函数。您不需要对该函数执行任何操作,但可以执行。您可以执行它:

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


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

您在add中返回一个函数

只打电话

add()

函数被执行,i增加1//1

当你打电话的时候

add()()

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

add()()

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

但是我认为你发布的代码有点不正确,值应该是

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

您正在“添加”中返回一个函数

只打电话

add()

函数被执行,i增加1//1

当你打电话的时候

add()()

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

add()()

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

但是我认为你发布的代码有点不正确,值应该是

add() //i = 1
add()() // i = 3
add()()() //i = 7
在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++;
        }
    }()
};
为了避免无限循环,我删除了函数3中的函数add(),并在函数2之后添加了“()”。 那么如果我们现在调用add()呢

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

在javascript中,“()”是函数调用操作符。所以每次你调用“()”,它将尝试在该运算符之前调用函数。在您的情况下,将为add分配一个函数。让我为每个函数分配一个名称,以便非常容易理解

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++;
        }
    }()
};
为了避免无限循环,我删除了函数3中的函数add(),并在函数2之后添加了“()”。 那么如果我们现在调用add()呢


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

你能解释一下你想做什么吗?在我的测试中,add()返回
function(){i++;return function(){i++;add();}
而不是1。@金朝武:这不是关于返回值。这是关于
i
之后的值。你能解释一下你想做什么吗?在我的测试中,add()返回
function(){i++;return function(){i++;add();}}
而不是1。@金朝武:这不是关于返回值。这是关于
i
之后的值。感谢您的快速响应。现在有意义了。感谢您的快速响应。现在有意义了。只有两个参数版本似乎做了额外的增量(通过调用
add()
).因此,乍一看,1、2、4看起来像是正确的返回值。为什么会是相反的呢?(“您的代码不正确,但它返回的是您期望的值”在这里没有说服我。)
i
在调用
add
后不会被重置->i=0、+1=1、+2=3、+4=7;我没有实际测试它,但在第一次调用后的任何地方或在代码中的函数中都没有看到
i=0
,只有两个参数版本似乎做了额外的增量(通过调用
add()
).因此,乍一看,1、2、4似乎是正确的返回值。为什么会是相反的呢?(“Y