w3ctech

一道简单的javascript题,问10个人有10种理解

var a = 10;
function aaa(){
    alert(a);
    var a = 20;
}
aaa();

================================================

var a = 10;
function aaa(){
    alert(a);
    a = 20;
}
aaa();

今天在某群问了一下这个问题,答案是千奇百怪的。各种理解都有,这个不是js的基础么?求大牛详细讲解一下?

w3ctech微信

扫码关注w3ctech微信公众号

共收到9条回复

  • 补充一下,是10种思路!不是10种答案。。。。。。。

    回复此楼
  • 肯定是undefined啊,这是关于js作用域链的知识,js中寻找变量总是在作用域链上寻找,aaa()函数中已经声明了变量a(虽然是在alert()之后定义的,但是js的变量都是提前声明的,无论方法中有多少变量,全部在方法一开始就声明了)所以alert(a)执行之前a已经声明,即就是a存在,所以不会再向作用域链上层寻找,此时的a就是undefied,解答完毕,。

    回复此楼
  • 回复此楼
  • undefined . 解释:var a = 10; aaa()时a为局部变量,js提前声明,但是不带定义,故alert(a)时是undefined

    回复此楼
  • 楼上的思路,很奇特!这是给自己挖坑啊!

    回复此楼
  • var a = 10;
    function aaa(){
        var a;
        alert(a);
        a = 20;
    }
    aaa();
    

    相当于这样,所以。。。

    回复此楼
  • 谢谢 月影大大 刚发现贴错了

    回复此楼
  • 第一题会得到局部变量的值(javascript hoisting)规则,第一题会得到在函数执行前的全局变量值。

    回复此楼
  • 其实这里只有二个概念 一个是变量(函数)提升,一个是作用域 ps:alert()先寻找 var 定义的变量

    回复此楼