作用域理解

概念:它是指对某一变量和方法具有访问权限的代码空间, 在JS中, 作用域是在函数中维护的。表示变量 或函数起作用的区域,指代了它们在什么样的上下文中执行,亦即上下文执行环境。

ES5的作用域只有两种:全局作用域和局部作用域

全局作用域

var a=1; //全局作用域
function fn1(){
   console.log(a)
};
fn1()

局部作用域

function fn1(){
   var a=1;   //局部作用域
};
fn1();
console.log(a);

全局变量和局部变量同名的坑

(1)在全局变量和局部变量不同名时,其作用域是整个程序。

(2)在全局变量和局部变量同名时,全局变量的作用域不包含同名局部变量的作用域。

var a=1;
function fn1(){
   console.log(a)
 var a = 2;
};
fn1();
console.log(a); 

undefined  //var声明会进行预解析  提前
1   //拿到的是全局变量

经典作用域面试题

var a = 10;    
function f1(){    
 var b = 2 * a;    
 var a = 20;
 var c = a+1;    
 console.log(b);    
 console.log(c);    
}    
f1()

NaN   // 首先内部a会提前进行预解析 变量提升  是undefined * 2  
21    // 此时预解析 a=20 + 1 
var a=10;
function test(){
   console.log(a);
   a=100;
   console.log(this.a);    
   var a;
   console.log(a);
}
test();

undefined  // 首先test'调用' 会去内部查找变量  var a 会进行预解析  此时只是声明了 但是没赋值
 
10  //  this 相当于拿到的全局变量 指向的是window

100   // 前面赋值 a = 100

你可能感兴趣的:(面试宝典,前端,javascript,面试)