JS对象(2)值通报与援用通报

title: JS对象(2)值通报与援用通报
date: 2016-10-05
tags: JavaScript

0x00 数据范例与数据结构

我们须要先回想一下。

JavaScript 是一种弱范例或者说动态言语。这意味着你不必提早声明变量的范例,在顺序运转过程当中,范例会被自动肯定。

另外,最新的 ECMAScript 规范定义了7中数据范例:

6种 原始范例: Boolean, Null, Undefined, Number, Stirng, Symbol

一种庞杂范例(援用范例)对象: Object.

JavaScript 统统皆对象(除了6中原始范例)

在 JS 中,一切除 Object 认为的范例都是不可变的。比方,JS 中字符串是不可变的,任何对字符串的操纵肯定返回了一个新字符串,原始字符串并没有被转变。

0x02 值通报与援用通报

经由过程上述的邃晓要邃晓 Javascript 中值通报与援用通报就太简朴了,下面的两个超等简朴的 demo 能够解释统统。

// 值通报
var a = 2;
function foo(b){
    b +=10;        
}
foo(a)
console.log(a) 
//  2
// 原始 a 的值没有发生转变

值通报:

  • 只将值举行通报,与原变量无关,值会被复制一份,保留在内存中另一个差别的位置。

  • 当我们修正通报后的值时,修正的是内存中新的位置,而原变量不会被影响,照样本来的值。

  • 这类状况每每出现在6中原始范例中。

//援用通报
var a = [2];
function foo(b){
    b.push(10)    
}
foo(a)
console.log(a) 
//  [2, 10]
// 原始 a 的值被转变了

援用通报:

  • 将内存地址举行通报,相当于把原变量完全的通报过来。

  • 当我们修正通报后的值时,修正的是内存中本来的位置,会对原变量形成影响。

  • 这类状况每每出现在对象上。

应用援用通报的特征,我们有了完成面向对象的基本

    原文作者:onejustone404
    原文地址: https://segmentfault.com/a/1190000007827978
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞