作用域
首先看下官方的定义:作用域是可访问变量的集合
是不是看的云里雾里,说实话我也不知道是啥意思
首先我们把上面的话拆分下,有提到'变量'两字,那么先看看变量的划分
1、全局变量:变量在函数外定义
2、局部变量:变量在函数内声明
var a = "全局变量" //我是全局变量
function b() {
var c = "局部变量" //我是局部变量,在函数内声明
}
我们在来打印看看
console.log(a) //输出"全局变量"
console.log(c)//输入undefined
可以看出,局部变量是无法获取到数据的,我们再来看看刚刚的定义:作用域是可访问变量的集合,因为变量有两种,那么我们也可以知道,作用域也有两种
1、全局作用域,对应全局变量
1、局部作用域,对应局部变量
var a = "全局变量" //我是全局作用域
function b() {
var c = "局部变量" //我是局部作用域,在函数内声明
}
console.log(a) //输出"全局变量",全局作用域可以直接访问
console.log(c)//输入undefined,局部作用域,只能在函数内访问
作用域链
我们说到链子一般会想到什么,链条、绳子、直线
话不多说直接上代码
var a = "全局变量" //我是全局作用域
function b() {
var c = "局部变量" //我是局部作用域,在函数内声明
console.log(a) //我在向作用域上一层一层往外找,打印"全局变量"
console.log(c) //我在向作用域上一层一层往外找,打印"局部变量"
}
仔细看看打印的数据,全部是有数据的
作用域链就是一层一层向上寻找的过程,直到找到全局作用域还是没找到,就宣布放弃。像不像顺着绳子向上爬的过程,这就是作用域链