JavaScript高级程序设计读书笔记二:变量与作用域

By 刘志军 , 2020-12-08, 分类: JavaScript

JavaScript

原始值与引用值

6种简单数据类型的值都是原始值, 原始值通过变量赋值给另一个变量时,会复制一个出一个新的值,两者相互独立。

let num1 = 5
let num2 = num1

微信截图_20201207010751.png

引用值通过变量赋值给另一个变量时,也会复制一个值,这个值其实是一个指针(引用),该指针指向的还是同一个对象。

let obj1 = new Object()

let obj2 = obj1

微信截图_20201207011052.png

既然是指向同一个引用对象,那么给obj1添加属性,也会作用到obj2身上去。

obj1.name = "zhangsan"

console.log(obj2.name) // zhangsan

函数在传参的过程中,只有一种情况就是按照值传递,这跟变量的赋值是一个样。只不过,对于引用值,传递的值是指针,但指针指向的还是同一个对象。

instanceof

typeof 一般适合用来判断原始值,对于引用值并不使用,因为 null 和 其它对象返回的都是 object,具体是什么类型的对象并不知道。 而判断引用值具体是什么类型对象最好的方法就是用 instanceof 表达式。

console.log(1 instanceof Object)  //false
let obj = new Object();
console.log(obj instanceof Object)  //true
console.log(null instanceof Object)  //false



function fun(){
    //
}
console.log(fun instanceof Object)  //true
console.log(fun instanceof Function) //true

console.log([] instanceof Object) //true
console.log([] instanceof Array) //true

作用域

变量的作用范围称为作用域或者执行上下文,变量脱离了该作用域不再可见,所有系统查找一个变量时是有一个作用域链的。先从引用该变量最近的块作用域找,没找到继续往外局部作用域找,再没找到就在全局作用域中查找。如果还没找到就会报错 ReferenceError: xxx is not defined。


关注公众号「Python之禅」,回复「1024」免费获取Python资源

python之禅

猜你喜欢

2021-11-12
Javascript 原型与原型链
2021-11-09
javascript对象的3个属性特征
2021-10-30
Javascript 解构赋值
2021-10-19
javascript 字符串长度
2021-10-15
javascript 箭头函数介绍
2021-10-15
javascript条件式访问属性
2021-09-21
Javascript 中,相等操作符两等号“==”与三个等号 “===” 有什么区别?
2021-05-13
python和javascript中的round函数区别
2020-12-08
JavaScript高级程序设计读书笔记三:基本引用类型
2020-12-07
JavaScript 高级程序设计笔记:基础语法