**更新了计数和功能。
我的问题是,在放入返回表达式时执行方程式,保存该值,这样如果再次调用该函数,它会保存先前的值并添加到它之上吗?我想有人可以详细说明为什么/这是怎么回事?
(i.e.: console.log ((cc(3)) = 1 Bet)); console.log (cc(2)) = 2 Bet, instead of 1 Bet (count from cc(3) was "saved"))
var count = 0;
function cc(card) {
// Only change code below this line
if (card>=2 && card<=6) {
count+= 1;
} else if(card>=7 && card<=9) {
} else {
count-=1;
}
if (count>0) {
return count + " Bet";
} else {
return count + " Hold";
}
}
答案 0 :(得分:2)
我的问题是,在放入返回表达式时执行方程式, 保存该值,如果再次调用该函数,它将保存 之前的值并加在它上面?
没有。方程式本身不能保存任何东西。
在范围内声明的变量在一段时间内保留其值(取决于它们声明的范围以及它们是否属于任何类型的闭包)。因此,引用变量的等式将始终使用该变量的最新值。修改稍后在等式中使用的变量的函数将使等式看到新的更新值。
修改强>
由于您现在显示card
是cc()
函数范围更高的变量,我们现在可以解释card
将从{{1}的一次调用中保留其值到下一个。
编辑结束
在您显示的代码中,只要您的代码运行,就会使用cc()
的当前值。您没有显示声明该变量的位置或其值的设置方式,因此我们无法对此进行评论。代码运行时,它将使用card
变量的当前值。
同样在您显示的代码中,将使用,更新并返回card
的当前值。下次运行此代码时是否保留修改后的值完全取决于声明count
的方式/位置。您需要向我们展示更多代码,包括声明count
和count
的位置以及其他位置,以便我们进一步评论它们的具体内容。
对函数的参数
如果你这样做:
card
您将获得如下所示的输出:
function increment(item) {
return ++item;
}
var cntr = 0;
console.log(increment(cntr));
console.log(increment(cntr));
因为1
1
的值从未更改过,因此每次调用cntr
时,您基本上都在执行increment()
,并且没有任何内容会修改increment(0)
的值,因此它会保留在cntr
0
。
将结果分配给原始变量
另一方面,如果你这样做了:
function increment(item) {
return ++item;
}
var cntr = 0;
cntr = increment(cntr);
console.log(cntr);
cntr = increment(cntr);
console.log(cntr);
然后,你会看到:
1
2
那是因为您将函数的返回值赋值回cntr
,因此每次更新它的值。因此,第一次拨打increment()
时,您正在执行increment(0)
以及下次执行increment(1)
时。
本地变量
函数中的局部变量仅存在于该函数的范围内。所以,如果你这样做了:
function increment() {
var val = 0;
return ++val;
}
console.log(increment());
console.log(increment());
你会看到:
1
1
每次increment()
调用都会创建一个新的局部变量val
,并将其初始化为0
。因此,每次调用increment
时,它只会获得0
的值并将其递增1并返回,以便它始终返回1
。
更高范围变量
但是,如果变量val
的范围更广:
var val = 0;
function increment() {
return ++val;
}
console.log(increment());
console.log(increment());
然后,你会看到:
1
2
这是因为变量val
的范围更高,并且对val
的两次调用都存在相同的increment()
变量,因此它的值从一次调用传递到下一次。
答案 1 :(得分:1)
因为您应该在函数外部声明count变量,而不是在函数内部。如果您想要根据需要进行打印,请将count变量放在函数内。
答案 2 :(得分:0)
试一试:
<html>
<head>
<meta charset="utf-8">
<style>
</style>
</head>
<body>
<script>
function cc(card) {
var count = 0;
if (card>=2 && card<=6) {
count+= 1;
} else if(card>=7 && card<=9) {
} else {
count-=1;
}
if (count>0) {
return count + " Bet";
} else {
return count + " Hold";
}
}
console.log(cc(3));
console.log(cc(2));
</script>
</body>
</html>
&#13;
答案 3 :(得分:0)
我认为你想使用一个闭包来存储一个持续调用的变量。
var cc = (function (){
var count = 0;
return function(value) {
count += value;
return count;
}
})();
cc(2) // 2
cc(3) // 5
这也称为模块模式,返回函数而不是对象。
简单的方法是将数量计算为全局,但是使用iife进行计数会使得其他代码无法访问该变量