【问题标题】:Using labels in javascript在 JavaScript 中使用标签
【发布时间】:2012-05-28 14:11:53
【问题描述】:

你能解释一下如何在与 break 交互的语句上使用标签:switch、while、do 和 for。

请举例。

【问题讨论】:

  • 您遇到了什么具体问题?能不能展示一些你看不懂的代码?
  • 问题是什么?你有什么问题?
  • 在 JS 编程中,我从来不需要使用标签。
  • Ohhhhh,我从来不知道那些存在于 JS 中。这就像goto 声明。不要使用它们。
  • 投反对票有点苛刻 - 这可能不是一个写得很好的问题,标签很可能仅次于 eval 在邪恶方面,但他问没有坏处。

标签: javascript


【解决方案1】:

通常,我在breaking out to outer loops看到它:

var i, j;

dance: for (i = 0; i < 20; i++) {
    for (j = 0; j < 20; j++) {
        console.log(i+'-'+j);
        if (j === 10) { //normally, break only breaks the immediate loop
            break dance; //this one breaks the loop labelled as dance
        }
    }
}​

//continue here after i = 0,j = 10

【讨论】:

  • “案例标签”和中断/继续标签是非常不同的东西。
【解决方案2】:

这是 JS 中 GOTO 标签上的一个很好的 article。我从不使用 GOTO 标签逻辑,所以我今天实际上也学到了一些新东西。

文章中的JS代码:

var pastures = getPastures();
 var i, pastureLen = pastures.length;

pastureLoop:
 for (i = 0; i < pastureLen; i++)
 {
    var pasture = pastures[i];
    var cows = pasture.getCows();

   var j, numCows = cows.length;
    for (j = 0; j < numCows; j++)
    {
       var cow = cows[j];
       if (cow.isEating())
          { continue pastureLoop; }
    }

   // No cows were eating, so fire the callback for pasture[i]
    pasture.executeCallback();    // or whatever
 }

【讨论】:

    【解决方案3】:

    引用 Mozilla 开发者网络Language Reference

    提供带有标识符的语句,您可以使用 break 或 continue 语句引用该标识符。

    例如,您可以使用标签来标识循环,然后使用 break 或 continue 语句来指示程序是应该中断循环还是继续执行。

    请注意,他们还说:

    标签在 JavaScript 中不是很常用,因为它们使程序更难阅读和理解。尽可能避免使用标签,根据具体情况,更喜欢调用函数或抛出错误

    【讨论】:

    • 这没有回答问题。此外,为什么会破坏
    • @SamuelRossille 我只是在引用最初开发该语言的人 - 请注意,同一页面 确实 描述了如何使用它,因此确实回答了问题。
    • 我自己不使用它们,但在我看来,这个论点总是存在循环性,因为在许多情况下,它们使代码“更难阅读”的唯一原因是人们在查看代码时不要使用它们并错过重点。在这种情况下,任何语言特性都可以这样说:使用它会使不使用或不理解该特性的人更难阅读代码。随着时间的推移,这已成为一种礼仪形式(“跟着我重复……”)。
    • @goldilocks 一个有能力的程序员确实对这个概念没有问题。然而,一个称职的程序员首先不需要问......
    【解决方案4】:

    不要使用标签。

    例子:

    // no label
    while (condition) {
        // do something
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      相关资源
      最近更新 更多