zoukankan      html  css  js  c++  java
  • 变量提升总结

    1、变量提升只针对等号左边进行提升~~~~

    sum()
    a()
    var a = function() {
        console.log(1)
    }
    function sum() {
        console.log(2)
    }
    
    1. 变量提升只针对等号左边进行提升
    2. 如上题:正确执行顺序是
    function sum(){
        console.log(2)
    }
    var a;
    sum();    //2
    a();      //报错 a is not a function~~~~
    function(){
        console.log(1)
    }
    
    

    2、当前作用域内,不管条件语句是否成立,都要进行变量提升

    3、一些总结

    变量提升
    • 在JS代码执行之前,浏览器要先过一遍代码,把其中带var和带function 关键字内容提前声明

    • 带var 是只声明(给个默认值undefined) 不定义

    • 带function 声明+定义

    • 因为 用function 关键字声明的函数 在变量提升阶段已经赋值完成, 所以我们可以在JS文件中的任意位置调用这个函数

    • 变量提升只会提升等号左边的部分; 不会提升右边的部分

    // 2种情况
    //1.变量声明----只会提升等号左边的部分
    var a = 1;
    
    //2.函数声明-------只会提升等号左边的部分
    var fn = funtion (){}
    
    • var 一个变量,相当于给window添加一个属性

    • 带var 会进行变量提升,不带var 的没有变量提升

    • var a=12;

    • let a=12 ; 不能重复声明

    • const =66; 声明常量用的 既不能重复声明,也不能重复定义

    • const 没有变量提升*/

    /*变量提升 是不看条件成不成立的 这个是针对var 来说的

    • 针对 function来说,在条件语句中的function声明;标准浏览器下只是声明,不定义的,
    • 在IE低版本,是既声明 又定义的*/

    变量提升的特殊情况

    • 1.只提升 等号左边的内容
    • 2.不管条件是否成立 都要进行变量提升;
    • 3.对于function声明比较特殊,在标准浏览器下,只声明,不定义
    • 4.在IE,低版本 是 既声明,又定义
    • 5.所有的匿名函数 都是不会进行变量提升的
    • 6.所有的自执行函数本身都不会进行变量提升
    • 7.return 后边的内容 是不会进行~~~~变量提升的
    • 8但是return 下边的代码是可以进行变量提升的
    • 9.

    es6 的声明

    • let/const创建的变量、函数,没有变量提升;也不会给window添加属性
    • let a = 12; 不能重复声明(会报错),~~~~但是能重复定义
    • const b=12 ; 声明一个常量 不能重复声明,不能重复定义*/
    console.log(a)   //报错
    let a = 1
    
    
    let b = 2;
    console.log(b)      //2~~~~
    console.log(window.b)//undefined~~~~
    

    例题

    分析:

    var a = 12,
        b = 13,
        c = 14
    function fn(a) {
        /*
        1、形参赋值a=12    =>是私有变量
        2、变量提升 var b; =>是私有变量
        */
    
        console.log(a, b, c) //12 undefined 14 =>c是全局变量
        /*
         b=20
         c=20
         a=20
        */
        var b = (c = a = 20) //c改变了全局变量,a、b是私有变量
        console.log(a, b, c) //20 20 20
    }
    fn(a)
    console.log(a, b, c) //12 13 20
    
  • 相关阅读:
    Mysql字符串字段判断是否包含某个字符串的方法
    linux下安装jenkins实现自动化部署
    Python:webshell 跳板机审计服务器
    Yum:更换aliyun的yum源
    Python:安装3.6
    Mysql:零散记录
    Kvm:通过 libvirt 远程管理虚拟机
    Python:socket实现ftp程序
    Python:用户自定义异常
    Kvm:启动报错:error: internal error: process exited while connecting to monitor: 2018-11-12T01:47:14.993371Z qemu-system-x86_64: cannot set up guest memory 'pc.ram': Cannot allocate memory
  • 原文地址:https://www.cnblogs.com/maizilili/p/12377706.html
Copyright © 2011-2022 走看看