• 变量提升和函数提升


    js的解析机制:遇到script标签的话js就进行预解析,将变量var和function声明提升,但不会执行function,然后就进入上下文执行,上下文执行还是执行预解析同样操作,知道没有var和function,就开始执行上下文。

    JavaScript中,函数及变量的声明将被提升到函数的最顶部。

    1.变量提升

    变量提升只提升变量名

    var x = 5; // 初始化 x
    
    elem = document.getElementById("demo"); // 查找元素 
    elem.innerHTML = x + " " + y;           // 显示 x 和 y
    
    var y = 7; // 初始化 y

    上例类似如下: 

    var x = 5; // 初始化 x
    var y;     // 声明 y
    
    elem = document.getElementById("demo"); // 查找元素
    elem.innerHTML = x + " " + y;           // 显示 x 和 y
    
    y = 7;    // 设置 y 为 7

     y输出了undefined,因为js只有声明的变量会提升,初始化的不会。上例自动提升变量y的声明,但不会提升y的赋值。

    2.函数提升

    函数声明提升直接将整个函数提到最顶端。且函数声明的优先级比变量声明高。

    js创建函数有两种方式:

    • 函数表达式          var foo = function foo ( ) { }
    • 函数声明方式      function foo ( ) { }
    console.log(a)  // f a() { console.log(a) }
    console.log(b) //undefined
        
    function a() {
            console.log(a) 
    }
    
    var b = function(){
            console.log(b)
    }

    注意:只有函数声明形式才存在提升。

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

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

  • 相关阅读:
    改进动物园
    异常动手脑总结
    代码大全2 阅读笔记
    抽象和接口
    Appium+python自动化2-启动百度app
    Appium+python自动化1-环境搭建
    python之图像识别
    python之栈和队列
    python之语音识别(speech模块)
    使用Python计算IP、TCP、UDP校验和
  • 原文地址:https://www.cnblogs.com/a-peppa-pig/p/9460158.html
Copyright © 2020-2023  润新知