前端老生

javascript小题目


 

/**

 * 1. 变量作用域链

 * 2. 当前宏任务执行完毕,立即执行微任务队列中的任务

 */


 

/**

 * 题目1:

 */

var a = 1;

setTimeout(function () {     

      var a = 2;   

      console.log(a);

     }, 0);

     a = 0;

 

/**

 * 题目2:

 */

var a = 1;

setTimeout(function () {    

    console.log(a);      

    var a = 2;

}, 10);

a = 0;


 

 

/**

 * 

 *  分别输出什么呢?

 * 

 *   别往下滑了,

 *

 *  该思考一下了...

 *  

 *  我们一起来分析:

 */



 

/**

 * 题目1:

 * 

 * 因为var a = 2;

 * 定义了局部变量a,并且赋值为2,根据变量作用域链,

 * 全局变量处在作用域末端,优先访问了局部变量,从而覆盖了全局变量 。

 * 所以输出> 2;

 * 

 * 题目2:

 * 因为var a = 2;

 * 定义了局部变量2,同样覆盖了全局变量,

 * 但是在console.log(a)之前a并未赋值,

 * 所以输出> undefined;

 */