摘要:在操作对象时,实际上是在操作对象的引用而不是实际的对象。任一变量值操作互不影响。访问变量有按值和按引用两种方式,而参数只能按值传递。基本类型参数传递传给函数的是数值的一个复制,函数中对其的修改外部不可见。
ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值。 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。
5 种基本数据类型: Undefined、 Null、 Boolean、 Number 和 String。这 5 种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值。ES6有多出一种Symbol类型。
访问变量引用类型的值是保存在内存中的对象,JavaScript 不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。为此,引用类型的值是按引用访问的。
复制变量值【复制变量值】复制基本类型变量的值,会在该变量对象上创建一个新值,然后把该值复制到新变量分配的位置上。任一变量值操作互不影响。
【复制引用指针】复制引用类型变量的值,同样会将存储在变量对象中的值复制一份放到新变量分配的空间中,不同的是这个值的副本实际上一个指针,而这个指针指向存储在堆中的一个对象。复制后,两个变量实际上将引用同一个对象。因此,改变任意变量,都会影响另一个变量。
参数传递 ECMAScript 中所有函数的参数都是按值传递的。访问变量有按值和按引用两种方式,而参数只能按值传递。
基本类型参数传递:传给函数的是数值的一个复制,函数中对其的修改外部不可见。
var a = 1; var b = 2; function change(a, b) { var c = a; a = b; b = c; console.log(a); //2 console.log(b); //1 } change(a, b); console.log(a); //1 console.log(b); //2
引用类型参数传递:传给函数的是数值的一个引用,函数中对其属性的修改外部可见,但用新引用覆盖其则在外部不可见
var a = [1, 2, 3]; var b = [5, 6]; function change(a,b) { a[0] = 4; //对其属性的修改外部可见 var c = a; a = b; //用新引用覆盖 b = c; console.log(a); //"5,6" console.log(b); //"4,2,3" } change(a,b); console.log(a); //"4,2,3" console.log(b); //"5,6"
a,b是change函数中的变量,在调用函数时传递了a,b的引用赋给了这两个变量,但是并不能改变全局中的a,b。因为用新引用覆盖在外部不可见,因为函数只是拿到了引用 并没有权力更改引用。
var a = [1, 2, 3]; var b = [5, 6]; function change() { var c = a; a[0] = 4; //对其属性的修改外部可见 a = b; //用新引用覆盖 b = c; } change(a,b); console.log(a); //"5,6" console.log(b); //"4,2,3"
因为js没有块级作用域,所以它在change里找不到变量a,b就会自觉的到上层去找,所以这里的a,b是全局变量的引用。
☞☞☞深究JavaScript系列☜☜☜
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/89325.html
摘要:构造器的目的是要创建一个新对象并对其进行设置,然后将其作为构造器的返回值进行返回,是通过函数调用初始化创建新对象。或方法进行调用通过或调用函数,被调用的函数的指向第一个参数指向的。 this JavaScript的this总是指向一个对象,而这个对象是基于函数运行时动态绑定的,并非函数声明时绑定。 函数调用方式 作为对象的方法调用 作为普通函数进行调用 作为构造器进行调用 通过a...
摘要:表达式没有返回值,因此返回结果是。并不改变表达式的结果,只要让表达式不返回值按惯例我们用来获得这主要源自语言,当然使用或其他表达式也是可以的。不是数字的数字如果数学运算的操作数不是数字类型,就无法返回一个有效的数字,这种情况下返回值为。 这里的内容是读书笔记,仅供自己学习所用,有欠缺的地方欢迎留言提示。 第一部分 类型和语法 第1章 类型ECMAScript语言类型包括Undefin...
摘要:所谓数组英语,是有序的元素序列。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。在栈中添加数据和删除数据也被称为推入和弹出,而且推入和弹出只会发生在栈的顶部。栈是一种数据结构,而队列则是一种的数据结构,即先进先出。 所谓数组(英语:Array),是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。 组成数组的各个变量称为数组的分量,也称...
摘要:一系列活动的执行上下文从逻辑上形成一个栈。堆栈中的上下文就会被依次执行并且弹出堆栈,直到回到全局的上下文。确定上下文中的指向对象确定指向或当前对象。 定义 执行上下文(也称执行环境execution context)(简称:EC)是个抽象的概念,是在函数被调用时,但是在函数体被真正执行以前所创建的。每个执行上下文都有一个变量对象(variable object),保存着当前环境中所有的...
摘要:是构造函数的属性,而不是实例对象的属性,指向原型对象。这个连接存在于实例与构造函数的原型对象而不是构造函数之间,也就是说实例对象与构造函数没有直接关系。 prototype、constructor、__proto__ prototype是站在构造函数的角度讨论原型对象的,用来实现基于原型的继承与属性的共享。__proto__是站在实例对象的角度讨论原型对象,构成原型链,同样用于实现...
阅读 2869·2021-11-16 11:55
阅读 2612·2021-09-29 09:34
阅读 3418·2021-09-01 14:21
阅读 3765·2019-08-29 12:36
阅读 701·2019-08-26 10:55
阅读 3973·2019-08-26 10:20
阅读 1030·2019-08-23 18:19
阅读 1199·2019-08-23 17:56