1.全局作用域 全局作用于在页面被创建时产生,在页面被销毁时随之消失。 全局作用域默认的始祖对象是window 全局作用域下读取不到函数作用域内的变量
2.局部作用域 局部作用域在函数执行时产生,函数执行完毕后,函数作用域也随之消失 局部作用域可以读取到全局作用域的变量
3.预编译
在函数被创建时,js会产生一个预编译的对象AO{},AO对象里就承载着函数作用域内部的所有形成过程
在页面被创建时,在全局作用域产生的前期,JS会产生一个全局的预编译对象GO{},GO对象里同样承载着全局作用域形成的过程
以函数作用域为案例讲述一道预编译的面试题
预编译形成过程:
1.创建AO对象 2.将形参和声明变量定义为对象中的属性,并且默认将它们的key设置为undefined 3.再将实参传入和函数定义并赋值给属性 4.函数声明赋值给属性
console.log(a) //function a(){}
function a(){}
console.log(a) //function a(){}
console.log(c) // 2
if(false){
var b = 111
}
var b = function(){}
console.log(b) //function(){}
console.log(d) //funciton d(){}
function d(){}
}
Demo(1,2)
/*
OA = {
a:undefined 1 funciton a(){}
b:undefined function(){}
c:undefined 2 function c(){}
d:undefined funciton d(){}
}
*/