作用域 - javascript中break的作用范围疑惑

查看:99
本文介绍了作用域 - javascript中break的作用范围疑惑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

1.我是新手,刚学javascript,遇到break的作用范围问题。

2

  <script>
    var degF=[212,"string data",-459.67];
    var degC=[];
    var lt;

    for(lt=0;lt<=2;lt++)
    {
        if (isNaN(degF[lt]))
        {
            alert("Data'"+degF[lt]+"'at array index"+lt+"is invalid");
            break;
        }
        degC[lt]=5/9*(degF[lt]-32);
        document.write("degF"+degF[lt]+"is"+"degC"+degC[lt]+"<br>")
    }
    
    </script>

3.问题:根据给我程序的教材解释,break终止了for循环,我怎么也弄不懂。根据我的理解:这个位置的break只是终止了if后{ }中要执行的语句而已,因为它只是for中嵌套的if语句中的部分语句,从位置上看并没有终止lt继续递增的作用啊?被嵌套的子部分可以终止父级?
不过,我也问了我的一个同学,-他反问我:如果按你的思路要把break放在哪呢?-我思考半天发觉放在其他任何地方都不对,只有原位置是对的。
不过,虽然实践后觉得是对的,但从理论上我还是不能认同这个位置的break是正确的。
希望前辈们帮我,谢~

PS:由此我还想问

 1. break、continue这类语句的作用范围怎么界定?
 2.我的同学说,break是全局响应,直接跳出总程序。我不认同他,我认为break只能终止一定范围。对吗?

解决方案

break只会跳出for, while, switch等这些循环,而if只是条件判断,里面的函数体会取决于条件执行或不执行,

你困惑的地方是为什么我在if里面break,却跳出的不是当前的if,反而是外面的for循环,那就牵扯到break方法的作用了,break方法用于跳出循环,举个例子全班50个人,点到有一个人没来就不继续点名了,点到有一个人没来就是if的条件,那么不继续点名就是跳出点名这个循环

breakcontinue没有什么全局响应的说法,只针对当前循环,如果说不是在循环中使用,那么就是对这个方法的错误理解,并且不会生效

===========================================================================================

回答二

  • 如果有大量嵌套,break也只会跳出当前循环,比如两个for循环,那么最里面的for循环中的break只会跳出最里面的for循环,外面的for循环继续遍历;

  • 你说while或者switch更容易理解,只是他们把判断包含进去了而已,switch每次判断使用的是case,那么在casebreak终止的也是整个switch而不是case不是吗?至于while每次开头都会进行判断,原理和for + if是一个道理,其实你要这样想breakif没有关系,我完全可以这样写,但是这样一进去就会跳出循环,失去了意义,我们写代码是为了执行解决需求的逻辑

    for (var i =0; i <= 10; i++) {
     break;
    }

  • break的用法和语言无关,不只是javascript是这样用,所有支持break语法的语法都是这个用法

  • break的格式就是要用在循环体中,用于跳出循环,至于你说的格式也许是你用的不多才这么想,你这个问题就像再问if这个方法有具体格式吗?应该写在哪个地方?,代码是人写的,首先你需要符合语言规范,其次满足你的代码逻辑,再上一层就是重构你的代码,使其变得优雅

这篇关于作用域 - javascript中break的作用范围疑惑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆