js作用域与变量,预解析

不问归期 提交于 2019-12-18 09:21:19

变量与作用域

基本类型的值不可以修改 引用类型可以

基本类型的值不可以设置属性与方法 引用类型可以

基本类型保存在栈内存中 引用类型在堆内存中 引用类型的地址保存在栈内存中

引用类型作比较时 只有他们的引用地址相同 他们才相等

基本类型的值 在复制的值被修改后 被复制的值不会改变

引用类型则会改变 因为指向同一地址

浅拷贝: 引用类型栈内存中使用同一地址

函数调用传参时 引用类型与基本类型都传的是值

js没有块级作用域

直接访问不存在的变量会报错 比如 console.log(person)
而如果 console.log(window.person) 则会返回 undefined

instanceof

查看前面是否是后面的实例
[ ] instanceof Array
基本类型不能使用

预解析

变量提升

预解析首先读取 var 与function定义的变量与函数
将var定义的变量置为 undefined
将函数整个解析

不通过var声明的变量为全局变量 不会被预解析

如果变量与函数同名则忽略变量

同名变量与同名函数则保留后面的

在不同的script标签中的 先预解析先写的script标签

console.log不存在的变量或函数会报错;不存在的属性或方法,返回undefined

不要在if 与for之中定义函数 (有些浏览器无法进行预解析)

部分例题

在这里插入图片描述

输出 [4] [4, 44]

第一个b被a赋值 a随后被改变指向 [4, 44] 但是b没有改变 只有a[0] = 1 a与b才会一起改变
2.
在这里插入图片描述

输出 xm

刚开始函数中obj引用与person一致 后来指向{} 所以再次修改与person无关
3.
在这里插入图片描述

输出 1 报错

x是局部变量 外部无法访问 y是全局变量
4.
在这里插入图片描述

输出 函数a2 1 报错

预解析后 a = 第二个函数
然后 所以第一个a 是第二个函数
然后运行 a被赋值为1
第二个a为1
此时a为一个变量
调用a函数后报错

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!