1.在页面写的代码都在全局作用域下,即window下的属性.
2.了解了解这个作用域在哪.
3.如果我用到了,它该如何去访问。
先看面试题
题目一
var a = 1
function fn1() {
function fn2() {
console.log(a)
}
function fn3() {
var a = 4
fn2()
}
var a = 2
return fn3
}
var fn = fn1()
fn() //输出多少
注:当执行var fn = fn1 ()这行代码,就相当于把当前作用域的栈给压入就不去管它,我们进入到了另外一个空间,即fn1作用域下或者叫它的活动空间下或者叫fn1的可执行上下文下。进入后执行fn1内的代码。
题目二
var a = 1
function fn1() {
function fn3() {
var a = 4
fn2()
}
var a = 2
return fn3
}
function fn2() {
console.log(a)
}
var fn = fn1()
fn() //输出多少
注:每当执行一个函数,它就进入了一个新的作用域下。
找的是变量的当前状态。
题目三
var a = 1
function fn1() {
function fn3 {
function fn2() {
console.log(a)
}
var a
fn2()
a = 4
}
var a = 2
return fn3
}
var fn = fn1()
fn() //输出多少
注:函数在执行过程中,先从自己内部找变量。即当你去使用一个变量或者给一个变量赋值的时候,那这个变量是从自己的作用域下找。
如果找不到,再从创建当前函数所在的作用域下去找,以此往上。
上层是指我当前这个函数在哪声明就在哪一层。