【问题标题】:Returning Last Value Assigned When Variables are Declared and Assigned on Different Lines返回在不同行上声明和分配变量时分配的最后一个值
【发布时间】:2015-11-04 11:37:30
【问题描述】:

我在 JS 中遇到了一个奇怪的返回问题,这取决于我的变量是否在同一行中声明和分配。也许有人可以解释为什么会发生这种情况。

当我运行这段代码时(变量在同一行中声明和赋值),它什么也不返回,这是有道理的,因为没有返回语句。

var hero = "lame";
var badguy = "strong";

if (hero === "strong") {
  if(badguy === "weak") {
    console.log("Awesome you won!");
  }
  console.log("You did not win.");
}

但是,当我运行这段代码时(变量在不同的行上声明和赋值),它返回“strong”,这是最后一个被赋值的变量,即使没有返回语句。这是为什么呢?

var hero, badguy;

hero = "lame";
badguy = "strong";

if (hero === "strong") {
  if(badguy === "weak") {
    console.log("Awesome you won!");
  }
  console.log("You did not win.");
}

感谢您的帮助!

【问题讨论】:

  • 它没有返回“strong”,你的 if 语句没有被执行。正在输出表达式 badguy = "strong" 的结果。
  • badguy = "strong" 只是将 "strong" 分配给 badguy。没有return语句,那么为什么会返回“strong”呢?它与代码的第一个 sn-p 有何不同?谢谢!
  • 你能在jsfiddle.net创建一个demo吗
  • jsfiddle.net/arunpjohny/vfsxtnf5/2 - 没有返回任何内容
  • 我假设您在控制台中运行所有这些。在这种情况下,控制台将显示最后执行的语句中的表达式的值。这是分配,因为第一个 if 条件将是错误的。控制台中的这种行为不是“返回”;它与函数中的return 语句的概念无关。

标签: javascript return return-value variable-declaration


【解决方案1】:

能否实现你的函数声明和函数调用?
我在浏览器控制台中尝试下面的代码,它们都返回未定义。

funcA = function() {
  var hero = "lame";
  var badguy = "strong";

  if (hero === "strong") {
    if(badguy === "weak") {
      console.log("Awesome you won!");
    }
    console.log("You did not win.");
  }
}

funcB = function() {
  var hero, badguy;

  hero = "lame";
  badguy = "strong";

  if (hero === "strong") {
    if(badguy === "weak") {
      console.log("Awesome you won!");
    }
    console.log("You did not win.");
  }
}

funcA(); // undefined
funcB(); // undefined

【讨论】:

  • 没有函数声明或函数调用,代码原样。如果您将它们都粘贴到控制台或按原样 repl.it 中,则第一个代码 sn-p 将一无所获,或者第二个代码 sn-p 将获得“强”。
【解决方案2】:

在 JavaScript(以及其他一些语言)中,当您进行赋值时,该赋值的值会自动返回。因此,您可以看到它被控制台记录。奇怪,我在互联网上找不到合适的参考。这是我能找到的最好的:http://www.sitepoint.com/assignment-inside-a-condition/

【讨论】:

  • 那么为什么在同一行声明和赋值变量时不返回值呢?
  • 好问题。在 javascript 中,我们有表达式和语句。表达式产生一个值,一个语句就是做某事。所以 var x = "test";意味着首先,在磁盘上创建一个空间并由 x 引用。初始值将是未定义的。然后 = 部分进行分配。我会猜测 undefined 将被返回,因为这将是表达式的第一部分。
  • 谢谢!如果其他人有更多信息会很棒,但这基本上解释了它。
猜你喜欢
  • 1970-01-01
  • 2012-11-02
  • 2011-03-16
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多