1、作用域的分类:
作用域:变量或函数生效的区域
,即一个变量可以使用的范围;
- 全局作用域:任何不在函数中或则大括号中声明的变量,都是在全局作用域下;全局作用域下的变量,在程序中的任何位置都可以访问到;
var a = 10;//a变量处在全局作用域下
function fun() {
console.log(a);//10
}
fun()
- 函数作用域(局部作用域):变量在函数内部中声明,只能在函数内部使用
function fun1() {
var b=20;
console.log(b);//20
}
fun1();
console.log(b);//报错
- 块级作用域:ES6新增let和const,通过let和const定义的变量在大括号外面是不可以被访问到的
{
let name = "张三";
const age = 18;
var sex="男"
console.log(name, age,sex);//张三 18 男
}
console.log(sex);//男
console.log(name, age);//报错
2、作用域链
作用域链:用于查找变量
;
在js中使用一个变量,首先会在当前作用域查找,如果没有找到,就去上层作用域寻找,依次类推,直到找到变量或达到全局作用域,如果没有找到,直接报错或者隐式声明这个变量。
var sex = "男";
function person() {
var name = "张三";
function student() {
var age = 18;
console.log(name);//张三
console.log(sex);//男
}
student();
console.log(age);//报错
}
person()