作用域理解

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

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

全局作用域

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

局部作用域

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

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

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

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

var  c =10

function  fn ()  {

var  c

console.log(c)   // undefined

} 

fn()

解释:其实就是当全局变量和局部变量同名的时候,局面是拿不到全局的变量
var a=1;
function fn1(){
   console.log(a)
 var a = 2;
};
fn1();
console.log(a); 

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

经典作用域面试题

var a =1 
function fn () {

console.log(a)  // 1 全局变量
a = 2  //修改了全局变量
}

fu()

console.log(a) // 2 
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值