【问题标题】:Variable reassignment in OOP languagesOOP 语言中的变量重新分配
【发布时间】:2013-02-16 19:47:40
【问题描述】:

我今天正在玩一些变量以更好地了解它们,我遇到了一些对我来说很奇怪的东西。这是一个 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 中。我在这里缺少一些基本的东西吗?

当bar 被分配两次时,为什么它会以Sethen is Sethen 工作??

【问题讨论】:

  • “这也发生在 PHP 中。” 究竟是什么?我明白了:codepad.org/jFYLlqmx.
  • 我的意思是说我也收到了Sethen is Sethen。下面回答了问题。

标签: javascript operator-precedence


【解决方案1】:

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

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

Mozilla 在operator precedence of JavaScript. 上有完整的文档

【讨论】:

  • 我明白了。变量在赋值之前先求值?
  • 不完全是。这一切都与表达式评估和操作顺序有关。
  • 哦,好吧,所以赋值运算符在操作顺序列表中排名靠后,大多数事情都发生在它之前。
  • 啊,我明白了。感谢您清除它!我一时不知所措。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:
               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"         
        

        【讨论】:

          猜你喜欢
          • 2015-12-14
          • 1970-01-01
          • 1970-01-01
          • 2018-04-13
          • 1970-01-01
          • 2010-10-09
          • 1970-01-01
          • 1970-01-01
          • 2014-12-25
          相关资源
          最近更新 更多