zoukankan      html  css  js  c++  java
  • 【《你不知道的JS(上卷①)》】四、提升

    四、提升:

    一)、声明与赋值:

    ​ 在JS引擎中,我们一般认为的变量或函数声明,实际上分为两个部分。

    声明 赋值

    // 变量提升
    a = 2;
    var a;
    console.log(a);
    
    // 函数提升
    foo();
    function foo() {
    	console.log(1);
    }
    

    var a = 2;

    ​ 这句声明实际上会被看为 var a; a = 2; 两个部分。第一个部分就是真正的函数声明,会在 编译阶段进行。而第二部分被称作赋值,在 执行阶段进行。在每个作用域中(包括全局作用域以及局部作用域)都会先寻找声明并首先处理。这样好像就把声明都放在每个作用域的开头几行中,因此这种行为被称作 提升

    二)、注意事项:

    • 每个作用域都会在其作用域范围内进行提升。

    • 函数声明优先于变量声明。

    • 多个同名函数声明,后面的函数声明会覆盖之前的声明。

    • 函数声明会被提升,而函数表达式不会被提升。

      foo();
      var foo = function() {
      	console.log(2);  //Uncaught TypeError: foo is not a function
      }
      
      • WHY?

        1. var foo; ( o) 在编译阶段被提升。

        2. foo(); ( o) 试图调用foo,但是此时函数表达式并没有赋值给foo!

    三)、小结:

    ​ 无论作用域中的声明出现在什么地方,都将在代码本身被执行前首先进行处理。

  • 相关阅读:
    如何解决MySQL Workbench Error Code 2013报错问题
    如何解决 执行 delete from 表等 遇到Mysql Workbench的Error Code: 1175错误
    java猜数字游戏while循环
    HDU 1069
    dp入门 石子相邻合并 详细带图讲解
    阶乘 大数保存
    strlen实现
    01背包和完全背包
    1.23 codeforces div3 C.Nice Garland
    数字三角形
  • 原文地址:https://www.cnblogs.com/enmac/p/13081676.html
Copyright © 2011-2022 走看看