做用域指的是能够访问的变量集合,咱们能够理解为:做用域就是起做用的区域 在 JavaScript 中有两种做用域类型: 私有做用域和全局做用域bash
在 JavaScript 函数中声明的变量,称为私有变量,只能在函数内部访问它们。函数
console.log(a)
// 此处的代码不能使用 a 变量
var f = function(){
var a = 100;
console.log(a)// 此时能够使用,内部赋值为100
}
复制代码
在此时,a即是fn函数的私有变量,在函数体外不能获取到。学习
函数外声明的变量,称为全局变量spa
var a =12;//全局变量
var f = function(){
var a = 100;
console.log(a)// 内部赋值为100
}
console.log(a)//12 全局的这个a和私有的a没有关系
复制代码
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
复制代码
上级做用域查找规律: 上级做用域是谁,就看这个函数在哪一个做用域声明定义的,对于私有做用域中的某些变量,若没有在私有做用域中声明过,那么函数执行时,就会去上级做用域查找改变量,上级做用域若没有该变量,则接着向上级查找,直到查找到全局做用域,若扔没有,则报错code
函数执行过程:先开辟一个私有做用域(栈内存),形参赋值,变量提高,而后代码从上向下执行;私有变量有形参和在私有做用域中声明过的变量,其余的变量都是上级做用域的。ip