基础知识回顾之–变量声明提升与函数声明提升

来看个例子:

  var a = 1;
  function foo(){
    console.log(a);
    var a = 2;
  }
  foo(); //undefined 为什么是未定义呢?

实际上它是长这样的:

  var a = 1;
  function foo(){
    var a;
    console.log(a);
    a = 2;
  }
  foo(); //undefined 变量声明被提升到了 当前foo函数内部作用域的最顶端

再来看个例子(加深理解):

  console.log(a); //function a() {} 输出了a函数 why?
  var a=1;
  function a() {}

分析一下解析过程:

  var a;
  function a() {}
  console.log(a); //function a() {} 函数声明被提升到了变量a下面 此时的变量a 因为同名 被a函数覆盖
  a=1;// 如果在下一行打印输出变量a 将输出 1

函数声明 优先于 变量声明(js中,函数是第一等公民)

  foo();// 1
 
  var foo = function () {
    console.log('2');
  }

  function foo() {
    console.log('1');
  }

分析代码:

  function foo() {
    console.log('1');
  }
  var foo;
  foo();// 1
  foo = function () {
    console.log('2');
  }

发表评论

电子邮件地址不会被公开。 必填项已用*标注