Home  >  Q&A  >  body text

javascript - 这段js代码打印出来的结果为什么是这样的?

var a = 1;
var b = function(){
    console.log(a);  // function a(){}
    a = 10;
    console.log(a);  //10
    return;
    function a(){} //声明提升
}
b();
console.log(a);   //1 为什么是这个数?

最后打印出来的a值,不应该是10吗?为什么是1呢?

伊谢尔伦伊谢尔伦2749 days ago1073

reply all(14)I'll reply

  • PHPz

    PHPz2017-04-10 16:30:55

    变量的作用域不一样,前一个是全局变量,后一个是局部变量

    reply
    0
  • PHPz

    PHPz2017-04-10 16:30:55

    很明显 最下面那个console是在Window作用域下,那window下的a是多少呢,是1。函数里面的执行顺序是这样的,function a(){},先声明了方法a,然后重新赋值了a=10,这个a是对方法a的赋值。

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 16:30:55

    作用域啊!你那函数b中由于由于声明提升a最初是函数,然后又变成数字。但它只有在调用b函数时执行一次,然后就从内存中清楚了。一点也没有影响全局的a,所以a值还是1。

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 16:30:55

    我觉得你可能忽略的一个知识点:函数声明同时也创建了一个和函数名相同的变量。这样一来函数作用域内部的执行顺序如下:

    var b = function() {
        var a;
        function a(){};
        console.log(a);//a()
        a=10;
        console.log(a);//10
      }

    reply
    0
  • Cancelreply