• js判断的执行顺序


    js预编译是对每一个<script>标签片段进行的。预编译声明所有var变量(初始为undefined),解析定义式函数语句。

    还有个关于 "window作用域下,a = 1和var a = 1" 的区别的也很经典:

    a = 1相当于window.a = 1,是动态地为window添加一个成员; 
    var a = 1是在当前作用域(也就是window)下声明一个a,这个声明是在整个作用域内都有效的。 

    换句话说,其实区别就在于var a = 1比a = 1多了一个声明的行为。 
    来看几个例子:
    <script>
        alert(a);
        f();
    </script>
    <script>
        alert(a);
        f();
        function f(){
            console.log('我执行了');
        }
        a=1;
    </script>
    <script>
        alert('333');
    </script>

    因为没有声明a变量,所以片段一和片段二都会报错,只有片段三弹出'333'

    <script>
        alert(a);//报错 找不到a
        f();
    </script>
    <script>
        alert(a);//弹出undefined
        f();//输出: '我执行了'
        function f(){
            console.log('我执行了');
        }
        var a=1;
    </script>
    <script>
        alert('333');//弹出333
    </script>

    片段一会报错,因为预编译是按script片段走的,片段一找不到a和f();片段二在预编译的时候,a变量会被提前声明并赋值undefined,f函数会被提前定义。

  • 相关阅读:
    一个简单的loading,纯属自娱自乐
    sql server CTE递归使用测试
    sql-删除无效sql链接
    sql-按周输出每月的周日期范围
    sql-计算每个月星期几有几天
    sql-GOTO跳转
    回滚与撤销
    数据库事务
    mysql 海量数据的存储和访问解决方案
    数据库范式
  • 原文地址:https://www.cnblogs.com/freefish12/p/5602141.html
Copyright © 2020-2023  润新知