作用域
变量和函数生效的区域
全局作用域:任何没有在函数中或者大括号中声明的变量,都是在全局作用域下
全局作用域下的声明变量可以在程序中任何位置访问
var a = 10
function fun(){
conole.log(a)
}
fun() // 10
函数作用域:函数作用域定义的变量,只能在函数内部访问,不能在函数外部访问
function func(){
var b = 20
console.log(b)
}
func() // 20
console.log(b) // 报错,b 未定义
块级作用域:let 和 const 定义的变量在大括号外面不可以被访问到
let 和 const
{
let name = "张三"
const age = 18
var sex = "男"
console.log(name, age, sex) // 张三 18 男
}
console.log(sex) // 男
console.log(name, age) // 报错
作用域链
JS 使用一个变量,首先 JS 引擎会在当前作用域下查找,如果没有找到,则去上层(父级/祖先级)作用域寻找,以此类推,直到找到变量或者到达全局作用域,如果没有找到,直接报错或者隐式声明。
var sex = "男"
function person(){
var name = '张三'
function student(){
var age = 18
console.log(name) // 张三
console.log(sex) // 男
}
student()
console.log(age) // 报错
}
person()