javascript-作用域和预解析

作用域(规定变量和函数可使用的范围叫做作用域)
什么是作用域链(每个函数都有一个作用域链,查找变量和函数时,需要从局部作用域到全局作用域一次查找,这些作用域的集合叫做作用域链)
 // 第一种
var a = 1;
function f() {
  console.log(a);
}
f() // 1

// 第二种
function f2() {
  var a2 = 3;
}
f2();
console.log(a2); // a2 in not defined

// 第三种(记住变量提升,必须声明变量才可以提升)
var a3 = 1;
function f3() {
  console.log(a3); // 1
  a3 =2;
}
f3() 
console.log(a3); //2

// 第四种(全局变量的作用域不会作用于局部的同名变量)

var a4 = 1;
function f4() {
  console.log(a4); // 1 
  var a4 = 2;
}
f4()
console.log(a4); //1

扩展作用域和预解析的结合
// 淘宝的面试题
var a = 10;
function f1() {
  var b = 2*a;
  var a = 20;
  var c = a + 1;
  console.log(b);
  console.log(c);
}
f1()
// 预解析的过程
/**
 * f1() {}
 * var a;
 * a = 10
 * 函数的变量提升
 * b
 * a
 * c
 * var b = 2*a = N=aN
 * var a = 20;
 * var c = 20 + 1 //21
 * console.log(b) // NaN
 * console.log(c) // 21
 */
预解析(js在执行的时候,分为编译阶段和执行阶段)
 // 预解析 (lexical envirmoment )

console.log(a);
var a = 10;

// 预解析的过程
var a;
console.log(a);
a = 10 // 执行阶段

var b = 123;
function b()
// 预解析
var b;
function b() {}
b = 123;

// 测试题
console.log(c); function c() {}
var c =1;
console.log(c); // 1
function c() { // 函数解析
  console.log(2);
}
// 解析的过程
function c() { console.log(2)}
var c;
console.log(c); // function
c = 1;
console.log(c); // 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lxslxskxs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值