• 预解析


    一、      预解析(在对应的作用域内执行)
                 *     函数或者变量都会有一个提解析的过程,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
  • 相关阅读:
    自己写的基类:Forms身份验证类、客户端事件类,序列化类下载
    毕业设计上线啦!跳蚤部落与基于Comet的WebIM系统开发
    域名解析碎片整理 《不同的子域名解析到同一服务器下不同的网站》
    Mac 命令行大全
    position 事件 zindex
    vue 微信公众号网页开发 跳转小程序 踩坑
    React 笔记
    我对架构师的理解(如何成为一个合格的架构师)
    听过我爸是李刚,你听说过我妈是上海人不?
    Lucene.NET打造站内搜索引擎
  • 原文地址:https://www.cnblogs.com/CafeMing/p/6366983.html
Copyright © 2020-2023  润新知