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;

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

  • 相关阅读:
    jquery2 数据缓存
    gb2312和utf8 转换
    extlangzh_CN.js错误“未结束的字符串常量”
    easyui datagrid 查询
    jQuery获取Select选择的Text和 Value(转)
    JavaScript无提示关闭窗口(兼容IE/Firefox/Chrome)
    简单介绍一些HTML代码(字幕、音频和视频)
    《JavaScript语言精粹》读书笔记
    在本地安装git的HTML帮助文档
    《卓有成效的程序员》读书笔记
  • 原文地址:https://www.cnblogs.com/a-peppa-pig/p/9460158.html
Copyright © 2011-2022 走看看