美文网首页
js预解析(面试哦)

js预解析(面试哦)

作者: 让思念入土 | 来源:发表于2019-02-12 21:31 被阅读0次

js 代码通过 js 解释器(js 引擎) 来执行的

js 解释器 来执行js 代码分为两步: 首先预解析 再 代码执行

预解析

1、首先把函数声明和变量声明,提升到当前作用域最前面。(原因,是因为JS是一个解释执行的脚本语言,从上到下执行。如果函数调用出现在函数定义之前,就会导致失败。)

带来的问题:

函数定义的提升没有太大影响

变量定义的提升,是有影响的

先把变量定义提升到最前面,然后按顺序执行代码,会出现变量赋值之前就对变量进行了操作的情况。违背了一个原则变量在第一次使用之前应该完成声明和初始化!!ES6中解决了这个问题。

2、变量提升的是声明并不赋值, 函数 只提升声明 并不调用

执行代码

按照从上到下的顺序执行

        //案例1
        var num1;
        console.log(num1);//undefined


        //案例2
        console.log(num2);//undefined
        var num2=10;
 

        //案例3
        console.log(num3);//报错  num3 is not defined

        // 相当于执行了以下代码
        var num2;
        console.log(num2);
        num2=20;
        

        //案例4
        fn();  //1
        function fn(){
            console.log(1);
        }


        //案例5
        fun();   // 报错  fun is not a function
        var fun=function(){
            console.log(2);
        }

        // 相当于执行了以下代码
        var fun;
        fun();
        fun=function(){
            console.log(2);
        }



         //案例6
        var fun=function(){
            console.log(2);
        }
        fun();   //2

        // 相当于执行了以下代码
        var fun;
        fun=function(){
            console.log(2);
        }
        fun(); 



        //案例7
        f1();
        console.log(c);
        console.log(b);
        console.log(a);

        function f1(){
            var a=b=c=9;
            console.log(a);
            console.log(b);
            console.log(c);         
        }


        //相当于执行了以下代码
        function f1(){
            //var a=9; //局部变量  外面不能使用
            //b=9; // 函数内部未声明 直接赋值使用的全局变量
            //c=9; // 函数内部未声明 直接赋值使用的全局变量
            var a=b=c=9;
            console.log(a);
            console.log(b);
            console.log(c);
        }
        f1();
        console.log(c);
        console.log(b);
        console.log(a);

函数名与变量名冲突:

console.log(a);
var a = 1;
console.log(a);
function a() {
     return false;
} 

//相当于执行了以下代码
var a;
function a() {
    return false;
}
console.log(a);//函数在js里属于一级公民  如果变量名和函数冲突,则会有优先执行 函数
a=1;
console.log(a); // 就近原则  1

相关文章

  • js预解析(面试哦)

    js 代码通过 js 解释器(js 引擎) 来执行的 js 解释器 来执行js 代码分为两步: 首先预解析 再 ...

  • JS预解析

    JS解释器运行JS分为两步:预解析、代码执行 预解析 JS解释器会把JS里面所有的var和function提升到当...

  • 预解析

    预解析是什么? 官方式: 预解析就是提前把变量或函数预先解析到它们被使用的环境中 聊天式: 预解析就是浏览器的js...

  • 预解析

    预解析: 在代码中,首先会预先解析一些(变量定义、函数会预解析); var a=12; js只把var a提到作用...

  • 学习笔记

    预解析1. js引擎在js代码正式执行之前会做一些预解析的操作2. 先找关键字var,function3. 找到v...

  • JS预解析

    请问如下代码输出结果是啥:

  • js预解析

    首先来一个简单的代码: 那么结果是什么呢?我本来以为是undefined、10、function a() { va...

  • Js 预解析

    突然感觉简书很便,不就是学习记录嘛。何必要费力不讨好的写自己的bolg,而且还是一个不会后台的前端狗。 今天本来是...

  • JS预解析

    javascript代码是通过浏览器中的javascript解析器来执行的,javascript解析器在运行jav...

  • js小知识点(预解析 引用 异常 严格模式)

    预解析:会预先解析一些(变量定义、函数会预解析);var a=12;只把var a提到作用域的顶部js会把变量的声...

网友评论

      本文标题:js预解析(面试哦)

      本文链接:https://www.haomeiwen.com/subject/nqrleqtx.html