变量提升的特殊情况

      变量提升的特殊情况

      1. 不管条件是否成立,都要进行变量提升
      1) 在新版本浏览器中,function只声明,不定义;
      2) 在老版本浏览器中,funciton不仅声明,而且定义
      2. 变量提升只发生在等号的左边
      3. return 后面不进行变量提升,但是下面的代码需要进行变量提升
      4. 如果变量名重复,不需要重复声明,但是要重新定义;
      5. 自执行函数当执行到这一行时,先定义再执行
      6.let声明的变量不进行变量提升,而且不能进行重复声明;
    // 代码部分
    fn()
    if([]){
        // 进入块级作用域,会立即父函数fn进行赋值;
        fn();
        function fn() {

        }
    }
    var  f = 1;
    function f() {

    }

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
      1.
      if不管条件是否成立,都要进行变量提升;
      2.
       1)在最新版本浏览器中,在块级作用域中,不管条件是否成立,带function只声明不定义;
       2)在老版本浏览器中,function不仅声明而且定义;
    //
   /* console.log(f);
    if([]==[]){
        var f = 1;
    }*/
   /* console.log(a);// undefined
    if("a" in window){// true;
        // 全局变量给window新增键值对是发生在变量提升阶段;
       var a =0;
    }
    console.log(a);// 0;*/
  /*  console.log(fn);
   if(isNaN(NaN)){//NaN==NaN
       // 只要进入块级作用域中,首先对函数进行定义;
       fn();
       function fn() {
           console.log(100);
       }
   }*/

  // 2. 变量提升只发生在等号的左边;
   /* console.log(b);
    var a = function b() {

    }*/
    /*console.log(jj);
    var obj= {
        hh:function jj() {

        }
    }*/

    // 3. 函数体中return后面的内容不需要变量提升,但是return下面的内容需要变量提升;
    // fn  实际存储了一个空间地址;
   /* function fn() {
        // return 出去的值就是函数的返回值
        // 1. 把函数体中的值return出去
        // 2. return 中止代码的运行;
        /!*console.log(a);
        return 100;
        function a() {
            console.log(1);
        }*!/
        console.log(a);
        return function a() {

        }
    }
    fn();*/

   // 4.如果变量名重复,不再进行重复声明,但要重新定义;
    /*console.log(fn);
    var fn = 100;
    function fn() {
        console.log(1);
    }
    fn();
    function fn() {
        console.log(2);
    }
    fn=1;
    function fn() {
        console.log(3);
    }
    fn();*/

    // 5.当代码执行到这一行时,自执行函数先定义然后马上执行;
    //console.log(fn);
   /* var c = (function fn() {
        return 1;
    })()
    var a = !function () {
        return 0;
    }();
    var b = -function () {
        return 1;
    }();
    console.log(c, a, b);*/

   // 6. let const
    // let 和const都是es6新增的定义变量的语法;
    // let和const定义的变量是不进行变量提升的;
    // let 声明的变量不可以重名;
    // const : 定义一个常量;
    console.log(100);
    let  a = 10;
    let  a =1;
    a=19;
    //const  h =9;
</script>
</body>
</html>
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值