判断作用域输出值

  • A+
所属分类:Web前端
摘要

   


js引擎运行

第一次解析(也称预解析):变量提升(含函数表达式)和函数提升

1️⃣ 前提是在作用域function或script情况下
2️⃣ 只提升变量名到当前作用域最顶端,不赋值不调用
3️⃣ 检查语法错误(如有则都不执行)

第二次解析:代码运行

从上到下,检查运行错误(如有则不再往下执行)

 

作用域题目练习

请描述下面代码的输出结果以及运行原因

(作用域链表)

题一

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

一解

/* 相当于执行以下代码 */ var a; console.log(a); // a无赋值,undefined a = 10; var a; console.log(a); // 10 a = 20; console.log(a); // 20 var b; b();            // 没有赋值直接调用报运行错误,b is not a function b = function() {     console.log(a); } 

题二

var num = 10; fun(); function fun() {     console.log(num);     var num = 20; } 

二解

/* 相当于执行了以下操作 */ var num; function fun() {     var num;     console.log(num);  // undefined     num = 20; } num = 10; fun(); 

题三

var num = 10;  function fn() {     console.log(num);       var num = 20;     console.log(num);   } fn(); 

三解

/* 相当于以下代码 */ var num; function fn() {     var num;     console.log(num);  // underfined     num = 20;     console.log(num);  // 20 } num = 10; fn(); 

题四

var a = 18; f1(); function f1() {     var b = 9;     console.log(a);     console.log(b);     var a = '123'; } 

四解

/* 相当于以下代码 */ var a; function f1() {     var b;     var a;     b = 9;     console.log(a);  // undefined     console.log(b);  // 9     a = '123'; } a = 18; f1(); 

题五

f1() console.log(c); console.log(b); console.log(a); function f1() {     var a = b = c = 9;      console.log(a);      console.log(b);      console.log(c);  } 

五解

/* 相当于执行以下代码 */ function f1() {     var a;  // 区别集体声明变量var a=9, b=9, c=9;     b = 9;  // 函数作用域内无声明则b、c为全局变量     c = 9;     console.log(a);  // 9     console.log(b);  // 9     console.log(c);  // 9 } f1(); console.log(c);  // 9 console.log(b);  // 9 console.log(a);  // Error报错:a没有被定义undefined 

题六

var num = 1; function demo() {     console.log(num);      function test() {         console.log(num);          num = 3;         console.log(num);      }     var num = 2     test(); } demo(); 

六解

/* 相当于执行以下代码 */ var num; function demo() {     var num;     console.log(num); // underfined     function test() {         console.log(num); // 2         num = 3;         console.log(num); // 3     }     num = 2;     test(); } num = 1; demo();