js变量-常见问题:const和var常见问题、语法错误报错原因、变量提升及其解決办法、变量复制传值和传址问题
变量常见问题
- 1、变量复制的传值和传址问题
- 2、 const声明常量改变不改变问题
- 3、var定义变量会改变window,且会造成重复声明
- 4、语法错误直接报错原因:解析器在执行代码之前会进行分析。
- 5、变量提升:变量声明提前
- 案列一:
- 案例二:函数范围内也存在变量提升
- 6、解决变量提升的办法:TDZ(暂时性死区)
- a、let 和 const 声明的变量产生TDZ,不会被提升到作用域顶部,如果在声明之前访问这些变量就会报错
- 案例一:
- 案例二:函数内情况
- b、函数传参形成TDZ
1、变量复制的传值和传址问题
基本类型传值,引用类型传址。这是因为在将一个值赋值给变量时,解析器必须确定这个值是基本类型还是引用类型。基本类型是按值访问,引用类型是按引用访问。
js的基本类型有:null、undefined、boolean、number和string
js引用类型
2、 const声明常量改变不改变问题
const声明常量,保存的是内存地址,重复声明会有提示。内存地址不可改变!!!(同一个作用域中)
如果想用常量定义对象的内容也不可以改变,我们可以使用:Object.freeze(常量名称);
3、var定义变量会改变window,且会造成重复声明
使用var定义的变量会放到window对象中,且会造成重复声明,所以最好使用let去定义变量,且let和const对于重复说明都会有提示。
4、语法错误直接报错原因:解析器在执行代码之前会进行分析。
5、变量提升:变量声明提前
案列一:
案例二:函数范围内也存在变量提升
6、解决变量提升的办法:TDZ(暂时性死区)
ES6的暂时性的死区(Temporal Dead Zone),简写为 TDZ:块级作用域里存在所声明的变量就绑定这个区域,不在受外部的影响。
CSDN-Ada助手: Deno有可能取代Node.js么?
CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)提升标题与正文的相关性。
普通网友: 写的真好!我也写了一篇获取【大厂面试真题解析、核心开发学习笔记、最新全套讲解视频、实战项目源码讲义、学习路线简历模板】的文章
常安: 请问一下为什么没有报错,但是点击编译运行后,就会出现一个弹窗显示“应用程序错误应用程序无法正常启动 (0xc0000906)。 请单击“确定”关闭应用程序”
Handsoneboy: 你好老师,我想问一下您遇到过应用到React中后富文本中的输入光标消失的问题吗