作用域
- 定义: 变量的作用范围
- 分类:
- 全局作用域
- 函数作用域
全局作用域
-
直接写在script标签中的JS代码在全局作用域中
-
在页面打开时创建,在页面关闭时销毁
-
全局作用域中声明的变量都是全局变量
- 在页面的任意位置均可访问
-
全局作用域中有一个全局对象window可直接使用
- 代表浏览器的窗口
- 由浏览器创建
- 用户可直接使用
-
作用:
-
创建的变量均可作为window对象的属性保存
var a=10 console.log(window.a) // 结果:10
-
创建的函数均作为window对象的方法使用
function fun(){ console.log('我是fun方法') } window.fun() // 结果: 我是fun方法
-
-
变量提升
- 表现
- 使用var关键字声明变量并赋值,声明部分会在所有代码执行前被声明
- 若变量的使用(调用)在声明之前,该变量的结果为undefined
- 若未使用var关键字则不存在变量提升
- 原因
- 浏览器运行代码先编译,在执行
- 编译后生成执行上下文和可执行代码
- 执行上下文 :内部保存变量、函数、函数的参数、函数的this指向等信息,所有声明语句都会在编译时被解析保存在对应的上下文中
- 可执行代码 :可理解为除声明语句外的语句,如赋值语句、循环语句、函数调用等
- 代码执行时,JS引擎会从上到下按行执行编译阶段生成的可执行代码
- 表现
-
函数提升
- 使用声明式声明函数,调用可在声明之前,不会产生报错
- 使用赋值式声明函数,先使用、在声明会报错(与变量提升有关)
- 函数提升优先级大于变量提升