[变量提升]

144 阅读3分钟
  • 常用linux命令

    • cd 切换文件路径一个命令
    • ls 产看文件目录
    • touch 创建文件
    • vi 编辑文件 先按i键进入编辑状态;编辑结束后 按esc键 退出编辑状态 在输入 :wq保存并退出
    • cat 查看文件内容 rm 删除文件 mkdir 创建文件 rmdir 删除文件夹

变量提升

  • var 之声明不定义 默认值undefined

  • a =12; 定义

  • var a = 12;

  • console.log(a); console.log(a, b) var a; //声明 只声明不定义 默认值undefined a = 12 //定义 var a = 13 console.log(f())//该 f 是变量提升阶段确定下来的函数 22

var f = function () { console.log(111) } console.log(f()) // 该 f 是从新赋值的函数111

function f() {
console.log(222)
}

sole.log(f())// 由于变量阶段提升已经定义了 f; 所以上边的function f 就不执行了; 111

  • 变量提升(声)
  • 在代码执行之前,JS会把代码带var的和带function的提前声明
    • 带var的是之声明不定义
    • 带function的声明又定义
  • 变量提升只提升等号左边部分
  • 变量提升 对于条件来说,不管是否成立 都会进行变量提升
    • 在条件句或者循环句中的function 声明高版本浏览器是之声明不定义

window

  • // console.log(a, b) // let a = 12; // const b = 13; //let const 不存在变量提升

    // 想用let const 声明的变量 必须在声明的下方使用
    // 在上边用 会有暂时性死去 的错误。

    // var let const 三个有什么区别

    //var 可以重复声明 let 和const 不可以 //var 存在变量提升 let 和const 没有 //var 声明的变量 会在window 下增加一个对应的属性; let和const 不会。| // var不能 let和cobnst能识别块级作用域

作用域

  • 作用域 就是代码起作用(能影响)的区域

    • 全局作用域和私有作用域。
    • 作用域 就是一个栈内存
    • 堆内存 是用来存储引用数据类型
    • 栈内存 是用来储存值类型 还有就是用来提供代码运行环境
  • 全局作用域 : 页面一打开就会形成一个全局作用域 一个页面只有一个全局作用域

  • 私有作用域 在函数执行的时候会形成一个私有作用域

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

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

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

  • 上级作用域

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

  • 函数执行时 现有形参赋值 再有变量提升

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