作用域指的是可以访问的变量集合,我们可以理解为:作用域就是起作用的区域 在 JavaScript 中有两种作用域类型: 私有作用域和全局作用域
1.私有变量
在 JavaScript 函数中声明的变量,称为私有变量,只能在函数内部访问它们。
实例
console.log(a)
// 此处的代码不能使用 a 变量
var f = function(){
var a = 100;
console.log(a)// 此时可以使用,内部赋值为100
}
在此时,a便是fn函数的私有变量,在函数体外不能获取到。
2.全局变量
函数外声明的变量,称为全局变量
实例
var a =12;//全局变量
var f = function(){
var a = 100;
console.log(a)// 内部赋值为100
}
console.log(a)//12 全局的这个a和私有的a没有关系
3.上级作用域
实例
var b =10;
var f2 = function(b){
console.log(b);//由于在函数体内没有声明,所以 b 的值就要到全局去找,
b = 200;
console.log(b)// 给 b 赋值:200,由10变为200,此时输出值为200
}
f2()
console.log(b)// 此时全局变量已经变成200
上级作用域查找规律: 上级作用域是谁,就看这个函数在哪个作用域声明定义的,对于私有作用域中的某些变量,若没有在私有作用域中声明过,那么函数执行时,就会去上级作用域查找改变量,上级作用域若没有该变量,则接着向上级查找,直到查找到全局作用域,若扔没有,则报错
4.函数的执行
函数执行过程:先开辟一个私有作用域(栈内存),形参赋值,变量提升,然后代码从上向下执行;私有变量有形参和在私有作用域中声明过的变量,其他的变量都是上级作用域的。