JavaScript"如何保存"通过变量的值?

时间:2016-07-07 01:46:50

标签: javascript

**更新了计数和功能。

我的问题是,在放入返回表达式时执行方程式,保存该值,这样如果再次调用该函数,它会保存先前的值并添加到它之上吗?我想有人可以详细说明为什么/这是怎么回事?

(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";
}

}

4 个答案:

答案 0 :(得分:2)

  

我的问题是,在放入返回表达式时执行方程式,   保存该值,如果再次调用该函数,它将保存   之前的值并加在它上面?

没有。方程式本身不能保存任何东西。

在范围内声明的变量在一段时间内保留其值(取决于它们声明的范围以及它们是否属于任何类型的闭包)。因此,引用变量的等式将始终使用该变量的最新值。修改稍后在等式中使用的变量的函数将使等式看到新的更新值。

修改

由于您现在显示cardcc()函数范围更高的变量,我们现在可以解释card将从{{1}的一次调用中保留其值到下一个。

编辑结束

在您显示的代码中,只要您的代码运行,就会使用cc()的当前值。您没有显示声明该变量的位置或其值的设置方式,因此我们无法对此进行评论。代码运行时,它将使用card变量的当前值。

同样在您显示的代码中,将使用,更新并返回card的当前值。下次运行此代码时是否保留修改后的值完全取决于声明count的方式/位置。您需要向我们展示更多代码,包括声明countcount的位置以及其他位置,以便我们进一步评论它们的具体内容。

对函数的参数

如果你这样做:

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)

试一试:

&#13;
&#13;
<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;
&#13;
&#13;

答案 3 :(得分:0)

我认为你想使用一个闭包来存储一个持续调用的变量。

var cc = (function (){
    var count = 0;
    return function(value) {
        count += value;
        return count;
    }
})();

cc(2) // 2
cc(3) // 5

这也称为模块模式,返回函数而不是对象。

简单的方法是将数量计算为全局,但是使用iife进行计数会使得其他代码无法访问该变量