变量提升及作用域

242 阅读2分钟

变量提升(声)

在代码执行之前,JS会把代码中带var和带 function的提前声明

* 带var的是只声明不定义
  带function的声明且定义

变量提升 只提升等号左边部分

  变量提升对于条件来说不管成立都会进行变量提成

在条件句或者循环据中function声明 高版本浏览器的是只声明不定义。

作用域

作用域就是代码能起作用(能影响)的区域
作用域就是一块栈内存
//堆内存是用来存储 引用数据类型的
//栈内存是用来存储值类型的还有就是提供代码的运行环境
  • 全局作用域:
 页面一打开 就会形成一个全局作用域,一个页面只有一个全局作用域 
  • 私有作用域:
在函数执行的时候会形成一个私有的作用域

私有作用域中的变量,有可能不是该私有作用域的私有变量,这时该变量对应的值,就需要去上级作用域查找,若仍不是上级作用域的私有变量,则接着向上级查找,直到找到window(全局)位置,若仍没有,则就报错

函数执行时,先有形参赋值,再有变量提升

  • 块级作用域
  指的是 判断句 循环句 的大括号抱起来的部分 es6新增  只有let 和const声明的变量能识别块级作用域
  对于var 不存在块级作用域这一说

全局作用域中声明的变量我们称为全局变量

私有作用域中声明的变量我们称为私有变量;形参也是私有变量。

上级作用域:

函数执行时形成的那个私有作用域,一般都会存在一个上级作用域,私有作用域的上级作用域是谁,跟这个函数在哪里执行没有关系,只跟函数在哪个作用域定义的有关系