JavaScript基础 -- 变量、作用域与内存

1 原始值与引用值

原始值就是最简单的数据,引用值则是由多个值构成的对象。在把一个值赋给变量时,JavaScript引擎必须要确定这个值是原始值还是引用值
原始值大小固定,保存在内存上;引用值是对象,存储在内存上
它们存在以下不同:

  1. 动态属性

定义的方式很类似,都是创建一个变量再给它赋值,但在变量保存了这个值以后,对于引用值来说,可以随时添加、修改和删除其属性和方法;原始值不能有属性,尝试添加也不会报错

PS:原始类型的初始化可以只使用原始字面量形式,如果使用 new 关键字,JavaScript则会创建一个 Object 类型的实例

在这里插入图片描述

  1. 复制值

从一个变量到另一个变量复制原始值会创建该值的第二个副本,这两个变量可以独立使用,互不干扰

包含引用值的变量实际上只包含指向相应对象的一个指针,而不是对象本身;从一个变量到另一个变量复制引用值只会复制指针,因此结果是两个变量都指向同一个对象


  1. 传递参数

ECMAScript中所有函数的参数都是按值传递的,函数外的值会被复制到函数内部的参数中,复制方式跟上面提到的规则一样

对象是按值传递的,比如下面这个例子:
在这里插入图片描述
如果 person 是按引用传递的,那么 person 应该自动将指针改为指向 name 为 Greg 的对象,而 name 值是 Nicholas,这表明函数中参数的值改变之后,原始的引用没有变。当 obj 在函数内部被重写时,它变成了一个指向本地对象的指针,而那个本地对象在函数执行结束时就被销毁了

PS:ECMAScript中函数的参数就是局部变量


  1. 确定类型

typeof操作符适合用来判断一个变量是否为原始类型,但值是对象或null,判断结果都是object

而对于引用值,我们通常不关心一个值是不是对象,而想知道是什么类型的对象,instanceof则来判断,如果变量是给定引用类型的实例,则返回true。按照定义,所有引用值都是object,因此检测任何引用值和 object 构造函数都会返回true

2 执行上下文与作用域

任何变量都存在于某个执行上下文中(也称为作用域),这个上下文决定了变量的生命周期,以及它们可以访问代码的哪些部分。每个上下文都有一个关联的变量对象,而这个上下文中定义的所有变量和函数都存在这个对象上。执行上下文分全局上下文、函数上下文和块级上下文
1)全局上下文是最外层的上下文,在浏览器中,全局上下文就是 window 对象

2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值