一个没有理解面试题

 var tt = 'aa';   

 function test(){

       alert(tt);       
       var tt = 'dd';
       alert(tt);    

       }   

  test();

为什么第一个弹出undifine呢?

又:

 var tt = 'aa'; function test(){


  alert(tt);  
  //var tt = 'dd';
  //alert(tt);

        }

   test();

弹出aa?

求各位大神解答下


肥皂起泡泡
浏览 1048回答 2
2回答

慕娘9325324

这样是全局的:var tt = 'aa';function test() {     alert(tt); }test();这是你的例子:var tt = 'aa';function test() {     alert(tt);         var tt = 'dd';     alert(tt); } test();在函数内部使用var声明变量,是局部的。优先级高于函数外部的全局变量。这个说明js解释器的解析顺序,尽管你的alert(tt)在var tt = 'dd'前面,但是它还是认为你是在内部定义了一个局部变量。function test() {     var tt;     alert(tt);     tt = 'dd';     alert(tt); }

素胚勾勒不出你

这题总结下来就2点知识:1. 声明提升2. 作用域链先说后者,js在访问一个变量时会优先在该作用域(访问时的那个作用域)内寻找是否声明过该变量,如果该变量已经存在,则直接使用它的值,否则它会寻找该作用域的‘父作用域/上级作用域’,以此类推,直到找到全局作用域为止。关于声明提升是指:js在解析的时候总是会将var, function这类关键词的声明语句提升至该作用域的最顶部(注意:这里只会提升声明部分)。于是你那段代码等价于下面var tt = 'aa';    function test(){           var tt; //这个tt未被赋值,按js的‘规矩’,它的值是`undefined`     alert(tt);     tt = 'dd';     alert(tt);     }    test();所以执行的时候返回的是 undefined 和 dd.
打开App,查看更多内容
随时随地看视频慕课网APP