0

今天我正在玩一些变量以更好地了解它们,我遇到了一些对我来说看起来很奇怪的东西。这是 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 Sethenbar被分配两次时起作用?

4

5 回答 5

3

bar在计算右侧表达式赋值。

在涉及操作顺序时,许多语言中的大多数赋值运算符的优先级都非常低。

Mozilla 有一个关于JavaScript 运算符优先级的完整文档。

于 2013-02-16T19:50:09.923 回答
1

表达式"Sethen is " + bar; 在赋值之前执行

于 2013-02-16T19:50:10.707 回答
0

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

于 2013-02-16T19:55:59.160 回答
0

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

于 2013-02-16T19:57:01.490 回答
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"         
于 2013-02-16T19:59:02.770 回答