什么是;添加()&引用;用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