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

    预解析

    1 预解析的相关概念

    JavaScript 代码是由浏览器中的 JavaScript 解析器来执行的。

    JavaScript 解析器在运行 JavaScript 代码的时候分为两步:

    预解析和代码执行。

    • 预解析:在当前作用域下, JS 代码执行之前,浏览器会默认把带有 var 和 function 声明的变量在内存中进行提前声明或者定义,预解析也叫做变量、函数提升。

    • 代码执行: 从上到下执行JS语句。

      注意:预解析会把变量和函数的声明在代码执行之前执行完成。

    2 变量预解析

    变量的声明会被提升到当前作用域的最上面,变量的赋值不会提升。

    console.log(num);  // 结果是多少?
    var num = 10;      //

    结果:undefined

    注意:变量提升只提升声明,不提升赋值

    3 函数预解析

    函数的声明会被提升到当前作用域的最上面,但是不会调用函数。

    fn();
    function fn() {
        console.log('打印');
    }

    结果:控制台打印字符串 --- ”打印“

    注意:函数声明代表函数整体,所以函数提升后,函数名代表整个函数,但是函数并没有被调用!

    4 函数表达式声明函数问题

    函数表达式创建函数,会执行变量提升

    fn();
    var  fn = function() {
        console.log('想不到吧');
    }

    结果:报错提示 ”fn is not a function"

    解释:该段代码执行之前,会做变量声明提升,fn在提升之后的值是undefined;而fn调用是在fn被赋值为函数体之前,此时fn的值是undefined,所以无法正确调用

  • 相关阅读:
    bzoj-2748 2748: [HAOI2012]音量调节(dp)
    bzoj-2338 2338: [HNOI2011]数矩形(计算几何)
    bzoj-3444 3444: 最后的晚餐(组合数学)
    codeforces 709E E. Centroids(树形dp)
    codeforces 709D D. Recover the String(构造)
    codeforces 709C C. Letters Cyclic Shift(贪心)
    codeforces 709B B. Checkpoints(水题)
    codeforces 709A A. Juicer(水题)
    Repeat Number
    hdu 1003 Max Sum (动态规划)
  • 原文地址:https://www.cnblogs.com/bky-/p/13681938.html
Copyright © 2011-2022 走看看