zoukankan      html  css  js  c++  java
  • 预解析

    一、      预解析(在对应的作用域内执行)
                 *     函数或者变量都会有一个提解析的过程,js会把函数或者变量提前解析一下,解析到它们对应的作用域最开始的僧
                 * 步骤
                 *  首先是在全局域下进行,
                 *     1、先找var 、function关键字以及参数
                 *     2、如果找到了var(声明的变量,参数),会给他赋一个undefined。如果找到了function,那它会把整个函数都拿过来
                 *             如果没有找到var那么就相当于结束了
                 *     3、把找到的东西,放到对应的作用域的最开始的位置
                 *     4、逐行执行代码

                 *  如果到了函数域(一个新的域里面),又会在函数域重新进行1.2.3.4

                //var a=undefined;
                
                /*var b=undefined;
                function fn(){
                    console.log(b);    //undefined
                    var b=20;
                }*/
                console.log(a);        //undefined
                var a=10;
                console.log(a);        //10
                
                var b=12;
                function fn(){
                    //var b=undefined;因为在函数域里面又重新开始找var并且找到了赋了一个undefined.
                    console.log(b);    //undefined
                    var b=20;
                }
                fn();
                
                var b=12;
                function fn(){
                    //因为在这里的函数域没有var,所以就没有重新赋予一个undefinded,
                    //直接的就用了上一个域里面的var b=12
                    console.log(b);    //undefined
                }
                fn();
    二、函数预解析
                /*function fn1(){
                    console.log('fn1');
                }
                var fn2=undefined;
                function(){
                    console.log('fn2');
                }*/
                
                /*
                 * 函数
                 *     1、函数声明
                 *         函数声明可以被预解析,所以可以先调用,再声明
                 *     2、函数表达式
                 *         函数表达式,不会被预解析,所以只能先声明再调用,不能把调用放在声明的前面(不然就报错)
                 */
                
                fn1();    //在这里fn1是可以调用
                function fn1(){
                    console.log('fn1');
                }
                //fn1();
                
                
                //fn2();        //报错
                var fn2=function(){
                    console.log('fn2');
                }
                fn2();    //fn2
  • 相关阅读:
    车辆年检、强险、车船税的关系
    .Net下几种ORM
    Windows 刷新图标命令
    VUE-CLI + AntV G6 兼容IE11
    CentOS 7 下安装 JIRA 8.7 和 Confluence 7.3
    .Net Core,VUE,VS Code,Sql Sugar,Element UI学习笔记
    Nginx 缓存代理
    java对象锁和类锁
    线程的生命周期
    数据库分库分表
  • 原文地址:https://www.cnblogs.com/CafeMing/p/6366983.html
Copyright © 2011-2022 走看看