作用域
1.变量使用使用区间的,变量不是说名之后在哪里都可以用,他有一个使用的范围,我们把这个范围叫做 作用域
作用域分为两种
1,全局作用域
JS 给我们提供了一个叫 window 的全局作用域,,可以理解为 整个 script 标签内的作用域,就是全局作用域 * 全局变量都会挂载到 window 对象上
2.局部作用域
在JS中,有 且只有 函数能够创建 局部作用域(函数作用域),局部作用域开始和结束位置,就是函数代码段的开始和结束位置
在局部作用域内(函数作用域)内 声明的变量叫做局部变量
局部变量 不会挂载到 window 对象上
var num = 100;
var aaa = 10000;
/**
* 根据规则,这里是 script 标签内部,所以是全局作用域, 这个 num 可以叫做全局变量
*
*/
console.log(num); //100
console.log(window); //100
console.log(aaa); //10000
var name = '飞飞'
//因为全局作用域 window 上有个属性叫做 name ,所以我们的全局变量,要避免起名的时候叫做 name ,尤其是开发的时候
console.log(window); //?
function fn(){
var num = 100;
console.log(num);
console.log(window);
}
fn()
var num = 100 // 李四
var num = 10000 // 张三
console.log(num); //李四以为
var num = 100 //
function fn() {
var num = 10000;
console.log(num);
}
console.log(num);
作用域链
什么是作用域链
变量的访问规则
变量访问会 先在当前作用域内查找,,找到拿来直接用,如果没有找到,会去上层作用域查找,找到直接用
如果上层作用域没找到,会继续去上层作用域 的 上一层作用域内查找,找到直接用,没找到会继续往上
如果找到了全局作用域内 还是没有变量,那么就会报错 unm is not defined
变量的赋值规则
变量赋值会 先在当前