OOP语言中的变量重新分配

时间:2013-02-16 19:47:40

标签: javascript operator-precedence

我今天正在玩一些变量以更好地感受它们,我遇到了一些看起来很特殊的东西。这是JavaScript中的一个例子

var foo = "Sethen";
var bar = foo;
var bar = "Sethen is " + bar;
console.log(bar);

我们得到Sethen is Sethen的输出,这不是我所期望的。我看到的是对bar的分配,然后是bar的另一个分配,它覆盖了bar值。我希望看到Sethen is Sethen is。这也发生在PHP中。我在这里缺少一些基本的东西吗?

为什么当Sethen is Sethen被分配两次时,这可以作为bar

5 个答案:

答案 0 :(得分:3)

在计算右侧表达式后,

bar被分配

许多语言中的大多数赋值运算符在操作顺序方面都具有非常低的优先级。

Mozilla在operator precedence of JavaScript.

上有一整个文档

答案 1 :(得分:1)

表达“Sethen is”+ bar; 在作业之前执行

答案 2 :(得分:0)

除了运算符优先级之外,您还需要了解运算符关联性 - http://en.wikipedia.org/wiki/Operator_associativity

答案 3 :(得分:0)

当你想用任何语言评估表达式时,编译器(解释器 js 中)首先评估表达式的计算部分(右侧),然后它将评估值存储(分配)给变量。 在这种情况下,您首先通过"Sethen"var bar = foo;分配给变量栏 在下一行中,您有一个表达式,编译器首先在其中评估"Sethen is " + bar;,现在(在分配之前)哪个栏保持"Sethen"。评估将导致"Sethen is Sethen"。然后编译器分配计算值为bar变量。在所有步骤之后,当您打印结果时,您会看到"Sethen is Sethen"

答案 4 :(得分:0)

       step 1:
             var foo="sathen";
             It store string "sathen" in foo

        step 2:
              var bar=foo;
              bar value contains foos value now bar="sathen" and foo="sathen"

        step 3:     
              var bar= "sathen is " + bar
              it will replce the value of bar in right side is "sathen is" +bar value4
                 "sathen"  
         So,your ans will come "sathen is sathen"