zoukankan      html  css  js  c++  java
  • JavaScript中的声明提升(Hoisting )

    原文:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html

    JavaScript中存在一种声明提升的现象,这种现象的例子如下:

    var foo = 1;
    function bar() {
        if (!foo) {
            var foo = 10;
        }
        alert(foo);
    }
    bar();//1
    
    var a = 1;
    function b() {
        a = 10;
        return;
        function a() {}
    }
    b();
    alert(a);//1

    原理:

    由于变量提升,因此会在函数的最顶部进行变量和函数的声明,即声明提升。

    举个例子来解释这种机制:

    function foo() {
        if (false) {
            var x = 1;
        }
        return;
        var y = 1;
    }

    上述代码的执行过程其实如下:

    function foo() {
        var x, y;
        if (false) {
            x = 1;
        }
        return;
        y = 1;
    }

    因此就造成了第一个例子中的现象。

    另附声明提升的顺序:

    1. 默认变量,例如this和arguments;

    2. 函数的参数;

    3. 函数的声明;

    4. 变量的声明。

  • 相关阅读:
    (QR14)带权的DAG节点排序
    数字组合
    最长连续不重复子序列
    树状数组
    归并排序
    差分
    前缀和
    64位整数乘法
    MySQL8 常用指令
    离线及实时实操架构
  • 原文地址:https://www.cnblogs.com/dhuhank/p/4460539.html
Copyright © 2011-2022 走看看