zoukankan      html  css  js  c++  java
  • 变量提升和函数提升

    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;

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

  • 相关阅读:
    258. Add Digits 数位相加到只剩一位数
    7. Reverse Integer 反转整数
    9. Palindrome Number 回文数的判断
    824. Goat Latin山羊拉丁文
    819. Most Common Word 统计高频词(暂未被禁止)
    Angular 2 模板语法
    HTML DOM Style opacity 属性
    Basic concepts (C language) – C 中文开发手册
    JavaScript手册 | JS Array 对象中的fill()方法
    HTML <form> 标签
  • 原文地址:https://www.cnblogs.com/a-peppa-pig/p/9460158.html
Copyright © 2011-2022 走看看