变量提升

194 阅读2分钟

常用的linux命令

  • cd 切换文件路径
  • ls 查看文件目录
  • touch 创建文件
  • vi 编辑文件 i键 出现插入 编辑内容 编辑完成后按esc 退出 输入:wq保存退出
  • cat 查看文件内容
  • rm 删除文件
  • mkdir 创建文件夹
  • rmdir 删除文件夹

##变量提升 在代码执行之前,js会把带有var和带有function 的提前声明

  • var 声明变量 只声明 不定义
  • function 即声明 又定义 变量提升 只提升等号左边的部分 变量提升 对于条件判断来说,不管成功与否,都会进行变量提升 在条件语句和循环语句中的function声明,在高版本浏览器中 只声明 不定义,与var一样 let 和 const 不存在变量提升,想用let 和 const 声明的变量,必须在声明的下方使用

let const var 三者的区别

  • var 可以重复声明,let const 不可以
  • var 存在变量提升 let const不存在变量提升
  • var 声明的变量会在window下增加一个对应的属性,let const不会
  • var 不存在块级作用域的说法 let const声明的变量,能识别块级作用域

作用域

就是代码能起作用(能影响)的区域,分为全局作用域 私有作用域 块级作用域 堆内存时用来存储 引用数据类型的 栈内存是用来存储值类型的 和 提供代码运行环境的

全局作用域 页面打开就会形成一个全局作用域 私有作用域 在函数执行的时候,会形成私有作用域 块级作用域 指的时判断句 循环句的大括号包起来的部分,属于es6新增的,只有let和const声明的变量。能识别块级作用域,var不存在块级作用域的说法

全局变量 在全局作用域中声明的变量 私有变量 在私有作用域中声明的变量 上级作用域 函数执行时形成私有作用域,一般都会存在一个上级作用域,私有作用域的 上级作用域是谁,跟这个函数在哪里执行没有关系,只跟这个函数在哪个 作用域声明定义有关系 私有作用域中的变量,有可能不是该私有作用域的私有变量,这时该变量对应的值就需要去上级作用域查找,若仍不是上级作用域的私有变量,则接着向上级查找,直到找到window(全局)位置,若仍没有,则会报错

上述的查找变量机制,我们称为 作用域链

另外 函数执行 会先形参赋值 再有变量提升