变量提升(声)
在代码执行之前,JS会把代码中带var和带 function的提前声明
* 带var的是只声明不定义
带function的声明且定义
变量提升 只提升等号左边部分
变量提升对于条件来说不管成立都会进行变量提成
在条件句或者循环据中function声明 高版本浏览器的是只声明不定义。
作用域
作用域就是代码能起作用(能影响)的区域
作用域就是一块栈内存
//堆内存是用来存储 引用数据类型的
//栈内存是用来存储值类型的还有就是提供代码的运行环境
- 全局作用域:
页面一打开 就会形成一个全局作用域,一个页面只有一个全局作用域
- 私有作用域:
在函数执行的时候会形成一个私有的作用域
私有作用域中的变量,有可能不是该私有作用域的私有变量,这时该变量对应的值,就需要去上级作用域查找,若仍不是上级作用域的私有变量,则接着向上级查找,直到找到window(全局)位置,若仍没有,则就报错
函数执行时,先有形参赋值,再有变量提升
- 块级作用域
指的是 判断句 循环句 的大括号抱起来的部分 es6新增 只有let 和const声明的变量能识别块级作用域
对于var 不存在块级作用域这一说
全局作用域中声明的变量我们称为全局变量
私有作用域中声明的变量我们称为私有变量;形参也是私有变量。
上级作用域:
函数执行时形成的那个私有作用域,一般都会存在一个上级作用域,私有作用域的上级作用域是谁,跟这个函数在哪里执行没有关系,只跟函数在哪个作用域定义的有关系