俏娇娃彩妆 发表于 2023-3-1 03:51:03

深入变量和闭包

加var 变量和不加var 变量的区别


[*]加var的变量 都会提升,不管代码执行与否, 不加var的变量预编译阶段不会提升
[*]原型链 和作用域链    window.a//不会报错 返回undefined   访问对象不存在的属性不会报错 ,走原型链 访问GO中不存在的属性
    a //直接访问未定义的变量会报错, 走作用域链 没有找到
[*]不管是否加var只要是全局变量, 在非严格模式下都会挂载到GO上
[*]没有加var的只能做全局
[*]项目中尽量避免var , 更不要不声明
let


[*]声明的变量不能访问
[*]let + {} 可以形成块级作用域只能在块中使用
[*]使用let声明的变量 不会挂载到GO上
[*]let定义同一个变量只能定义一次 ,二次定义会报错    function(a){
    // 在函数内部的形参相当于函数定义的局部变量
      let a = 1//这里会报错
    }
const


[*]声明的变量不能修改
[*]声明必须赋值, 不然报错
[*]声明的变量不会提升
[*]const 和{}也可以形成块作用域 ,也不会挂载到GO上
闭包 一个不能回收的栈内存


[*]保护EC中的变量 外界不能范围
[*]保存可以像使用全局变量一样使用局部变量 延长变量的生命周期
https://s2.loli.net/2023/02/28/3SF6kCftyuElaY2.jpg
练习题
https://s2.loli.net/2023/02/28/6N1gBKovCkEe8Hy.jpg
//
https://s2.loli.net/2023/02/28/yZUVXhsKtRfnJj2.jpg
https://s2.loli.net/2023/02/28/4SjlWHqYmVzfxR1.jpg
https://s2.loli.net/2023/02/28/QOXL3MeahCHq8J5.jpg
https://s2.loli.net/2023/02/28/96LGZelE5vbXSUw.jpg

来源:https://www.cnblogs.com/whokillbill/p/shen-ru-bian-liang-he-bi-bao.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 深入变量和闭包