zoukankan      html  css  js  c++  java
  • JS的变量提升

    变量提升

    var声明的变量。

    console.log(v1);
    var v1 = 100;
    function foo() {
        console.log(v1);
        var v1 = 200;
        console.log(v1);
    }
    foo();
    console.log(v1);

    输出结果:

    //undefined
    //undefined
    //200
    //100

    函数提升

    声明函数的两种方式:

    function bar () {}    //函数声明式
    var foo = function () {}     //函数字面量式,这个和变量提升的结果是一样的,函数只是一个具体的值

    但是函数声明式的提升现象和变量提升略有不同,具体如下:

    console.log(bar);
    function bar () {
      console.log(1);
    }

    输出结果:

     执行顺序相当于:

    function bar () {
      console.log(1);
    }
    console.log(bar);

    函数提升是整个代码块提升到它所在的作用域的最开始执行

    变量提升和函数提升的优先级问题

    函数提升要比变量提升的优先级要高一些,且不会被变量声明覆盖,但是会被变量赋值之后覆盖。

    console.log(a);    // f a() {console.log(10)}
    console.log(a());    //  10
    var a = 3;
    
    function a() {
        console.log(10) 
    }
    console.log(a)   // 3
    a = 6;
    console.log(a());  // 报错:a is not a function;

    执行顺序相当于

        var a = funtion () {
            console.log(10)
        }
        var a;
        console.log(a);    //  f a() {console.log(10)}
        console.log(a());  //  10
    
        a = 3;
        console.log(a)   // 3
        a = 6;
        console.log(a());   // 报错:a() is not a function;
  • 相关阅读:
    BZOJ4553: [Tjoi2016&Heoi2016]序列
    BZOJ4552: [Tjoi2016&Heoi2016]排序
    BZOJ4551: [Tjoi2016&Heoi2016]树
    BZOJ4556: [Tjoi2016&Heoi2016]字符串
    BZOJ4546: codechef XRQRS
    CC 3-Palindromes(manacher)
    hdu3294(manacher)
    hdu4513(manacher)
    poj3974(manacher)
    CF 518D(概率dp)
  • 原文地址:https://www.cnblogs.com/xjy20170907/p/12618605.html
Copyright © 2011-2022 走看看