前端学习第二阶段 学习JS多思考、多尝试

举报
旧梦重拾 发表于 2020/07/18 10:15:28 2020/07/18
【摘要】 杜绝死记硬背,多思考,理清程序的脉络 当我们遇到想不明白的问题时,一定要理清程序执行的过程,弄明白程序的执行逻辑。这样不仅有助于我们记忆语法知识,更重要的是了解了程序的执行过程可以在以后的编程中少跳坑。学习编程切忌死记硬背,如果不理解程序的执行过程,只记住语法结构,一旦在以后的编程中遇到BUG问题就会不知所措。 例如在学习js逻辑运算的短路逻辑时,老师告诉我们: ...

杜绝死记硬背,多思考,理清程序的脉络

        当我们遇到想不明白的问题时,一定要理清程序执行的过程,弄明白程序的执行逻辑。这样不仅有助于我们记忆语法知识,更重要的是了解了程序的执行过程可以在以后的编程中少跳坑。学习编程切忌死记硬背,如果不理解程序的执行过程,只记住语法结构,一旦在以后的编程中遇到BUG问题就会不知所措。

        例如在学习js逻辑运算的短路逻辑时,老师告诉我们:


                &&(与运算)短路逻辑:

                语法:表达式1 && 表达式2;

                如果第一个表达式的值为真,则返回表达式2

                如果第一个表达式的值为假,则返回表达式1

                ||(或运算)短路逻辑:

                语法:表达式1 || 表达式2;

                如果第一个表达式的值为真,则返回表达式1

                如果第一个表达式的值为假,则返回表达式2


        如果死记硬背知识点,只知道“当表达式1为真的时候返回表达式2”,很容易在以后的工作、学习中出现记忆混淆。程序的逻辑出错就会导致BUG产生,产生BUG以后不知道程序的执行逻辑再去找BUG出现的原因就会非常困难。

        我们应该多思考为什么程序会这样返回?逻辑短路是在什么情况下发生的?为什么会发生短路?



        &&(与运算)执行逻辑:

        当表达式1为真的时候,继续执行表达式2,此时无论表达式2是真还是假都会返回表达式2的结果(因为此时表达式2为真时&&运算的结果为“真&&真”直接返回表达式2的结果。若表达式2为假时&&运算的结果为“真&&假”应该返回“假”。所以当表达式1为真时程序不会中断,会继续执行表达式2,并返回表达式2的结果)

        当表达式1为假的时候,由于&&运算只要有一个为假即结果为假,所以此时无需判断表达式2的真伪,直接返回表达式1即可,此时程序会中断表达式2的执行。


        ||(或运算)执行逻辑:

        当表达式1为真的时候,由于||运算只要有一个真即结果为真,所以此时无需判断表达式2的真伪,直接返回表达式1,此时程序会中断表达式2的执行。

        当表达式1为假的时候,程序会继续判断表达式2的真伪,并且无论表达式2是真还是假都会直接返回表达式2。(因为此时表达式2为真时,||运算结果为“假||真”应该返回表达式2;若表达式2为假,||运算结果为”假||假“也会返回表达式2。此时程序会继续执行表达式2)



        理解了&&和||运行的执行过程我们就会明白,程序之所以会短路,是由于逻辑运算符“&&只要有一个条件为假结果就是假”和”||只要有一个条件为真结果就是真“。在表达式1已经可以确定逻辑运算结果的情况下程序就不再执行后面的语句,直接返回逻辑结果。



要有自己的思想,不要被权威左右

        学习的过程应该保持怀疑的态度,老师不一定是对的,书本不一定是对的,实践是检验真理的唯一标准。

        例如下面这两个题目:

        我们知道while循环的执行条件不一定是数字,也可以是布尔值等,例如

        while (userName != 'admin' || passWord != '123456') {
            var userName = prompt("请输入用户名");
            var passWord = prompt("请输入密码");
        }


    但是for循环的条件就一定是数字吗?上学的时候做选择题遇到这种带“一定”、“必须”的选项我都会特别留意,经验告诉我这类选项大部分都是错的。于是我在网上查询了一下JS的循环语句,结果如下:

                JavaScript 支持不同类型的循环:

      • for - 循环代码块一定的次数

      • for/in - 循环遍历对象的属性

      • while - 当指定的条件为 true 时循环指定的代码块

      • do/while - 同样当指定的条件为 true 时循环指定的代码块

        for (语句 1; 语句 2; 语句 3){
            被执行的代码块
        }


        for循环中的语句1、语句2、语句3都是可选项(也就是说不使用语句1、2、3也是可以正常运行的)例如:

        for (;;) {
           var passWord = prompt("请输入密码");
        }

        这个程序会一直循环请输入密码窗口,这说明for循环条件不一定是数字,同时说明上面两个题目都是有问题的。由于是单选题,所以不存在正确答案。



多尝试改写代码,甚至是把正确的改成错误的

        学习的过程中要多尝试改写代码,甚至是把正确的代码改成错的,观察错误的产生过程,这可以帮助我们学习调试程序,并对错误代码加深印象避免以后跳坑。

        让我们来用for循环改写下while循环的练习题——用户登录:

    //定义变量存储用户名
    var userName = prompt("请输入用户名");
    //定义变量存储密码
    var passWord = prompt("请输入密码");
    //用户名为”admin“,密码为”123456“,则提示用户登录成功!否则,让用户一直输入
    for (;userName != 'admin' || passWord != '123456';) {
        userName = prompt("请输入用户名");
        passWord = prompt("请输入密码");
    }
    alert("用户登录成功!");

        尝试运行以上代码你会发现它和while循环一样可以实现用户登录需求,这再次证明了for循环的循环条件可以不是数字。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200