js判断的执行顺序

Posted 会飞的鱼儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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函数会被提前定义。

以上是关于js判断的执行顺序的主要内容,如果未能解决你的问题,请参考以下文章

JS怎么判断异步是不是执行完成

js如何判断某个函数是不是执行完?

JS+JavaBean判断管理员增删改的操作权限

js简洁代码片段

jQuery 是如何判断HTML页面加载完毕的?它的原理是啥?

cefsharp轮询执行js判断控件是不是已加载