JavaScript中的变量和函数提升

变量和函数的提升

  • 变量提升:把var声明的变量提升到当前作用域的顶部,只提升声明,不提升赋值
    alert(a)
    var a = 10    
    // 上面两行代码完成变量提升以后相当于是下面这三行
     var a
     alert(a)
     a = 10    //undefined
JS运行和编译
  • 语法分析
    ​ 查找基本语法有没有错误

  • 预解析
    ​ 1:执行之前进行预解析
    ​ 2:var、function关键字提前到当前作用域的顶部,变量默认值为undefined,函数默认值为函数体代码块,当函数与变量重名时,保留函数。

  • 解释执行

  console.log(b) // 报错,b is not undefined ,因为b不会提升
    b = 20
 //变量提升是提升到当前作用域的顶部
     var x = 20
     function  fn () {
       console.log(x)
       var x = 10
     }
     fn()
     
  // 上面代码完成变量提升以后相当于是下面的代码
  // 所以函数内部访问x,那么优先访问自己的布局变量x,所以输出undefined
     var x = 20
     function  fn () {
       var x
       console.log(x)
       x = 10
     }
     fn()    
   fn()
    // function 关键字声明的函数会提升整个函数体到当前作用域的顶部
    function fn () {
      console.log(123)
    }
    fn()   //fn()放在函数前面,后面都可以
    test() // 报错
    // 这种方式声明的函数只提升声明,不会提升函数体
    var test = function () {
      console.log(456)
    }
    test()    

注意:这种命名函数体,把test()放在前面不会提升,只是把var test提到前面了,并没有赋值,会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值