<!--
变量作用域
=> 变量生效的范围
=> 全局作用域
函数最外层定义的变量
=> 局部作用域
=> 函数体中定义的变量
变量使用规则
=> 访问规则
在自己的作用域范围查找,如果自己的作用域没有,在上一级作用域查找,如果上级作用域没有,到全局作用域查找;
全局作用域没有查找到,直接报错
=> 赋值规则
作用域链
变量访问或赋值时,
先在自己的作用域查找,
如果没找到,再一层一层向上查找,至到最外层全局作用域。
这种层层查找关系,叫作用域链
var num = 100 // 全局作用域
function fn() {
var num1 = 200 // 局部作用域 fn
function fun() {
var num2 = 300 //局部作用域fun函数中
console.log('num2 :', num2) // 在自己的作用域范围查找
console.log('num1 :', num1) // 如果自己的作用域没有,在上一级作用域查找
console.log('num :', num) // 如果上级作用域没有,到全局作用域查找
console.log('num3 :', num3) // 全局作用域没有查找到,直接报错 Uncaught ReferenceError: num3 is not defined
}
fun()
}
fn()
-->
var num = 100 // 全局作用域
function fn() {
var num1 = 200 // 局部作用域 fn
function fun() {
var num2 = 300 //在自己作用域查找变量,找进行赋值
num1 = 400 // 如果自己的作用域没有,上一级作用域查找,找到赋值
num = 500 // 全局作用域查找,找赋值
num4 = 600 // 全局作用域也没找到, 在全局作用域自动创建变量,再赋值
console.log('num2 :',num2);
console.log('num1 :',num1);
console.log('num :',num);
console.log('num4 :',num4);
}
fun()
}
fn()