我已将数字0指定给函数外的变量。我正在使用这个变量来利用闭包,因为我还创建了一个简单的函数,它返回变量,仅仅是为了跟踪我调用函数的次数。我调用该函数5次,最后将调用的函数传递给alert函数。令人困惑的是,如果我增加变量然后返回变量,我得到的警报消息是“6”而不是“5”,这是我调用函数的次数,但是,如果我增加变量并返回它同时,意味着变量增量是return语句的一部分,我得到了我在警告消息中调用函数的正确次数。为什么我会得到不同的结果?我用作我的计数器的函数外部的变量被赋予数字0.创建全局执行上下文并保持此变量对吗?除此之外,我的5个调用创建了5个执行上下文,每次,新增加的变量都存在并保留在内存中,以便下一次调用增量。 “6”来自哪里? 这是我的代码,它产生6作为调用函数的次数:
var i = 0;
function add() {
i++;
return i;
}
add();
add();
add();
add();
add();
alert(add());
只需这样做:
function add() {
return i++;
}
我收到了正确的号码警报。
答案 0 :(得分:1)
在第一种情况下,在递增后返回值,在递增之前返回第二个值
尝试alert ( i );
而不是alert( add() );
,您将获得相同的值
答案 1 :(得分:1)
这与增加流量有关。
预增量(++ i)将值i
加1,然后返回i
,相反,i ++返回i然后加1。
在第一种情况下,您在单独的语句中增加值,因此,前或后增量不起任何作用,在第二个前或后增量播放角色中,因为函数首先返回i
而不是增量。
如果你的函数add是下一个
,你会得到相同的结果function add(){
return ++i;
}
答案 2 :(得分:0)
return i++;
表示你首先返回我然后再做增量。
顺便说一下,
return ++i;
表示你执行incrementfirst然后返回i。
答案 3 :(得分:0)
当你调用alert(add())时,你再次调用add()并将i的值增加到6,因为i的当前值是5,因为你已经调用了add 5次。如果你在add()之前打印我的警告仍然是5,但是一旦你在alert中调用add()它就会变成6,因为你正在调用方法调用。
var i = 0;
function add() {
i++;
return i;
}
add();
add();
add();
add();
add();
// alert(i +' '+ add()); //5 6
alert(add() +' '+ i); //6 6