JavaScriptゼロベースの通関手続き(13)単純なデータ型、単純なデータ型パラメーター、単純な型と複雑な型、単純な型のメモリ割り当て、複雑な型のメモリ割り当て

27-単純なデータ型

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script>
        // 简单数据类型 null  返回的是一个空的对象  object 
        var timer = null;
        console.log(typeof timer);
        // 如果有个变量我们以后打算存储为对象,暂时没想好放啥, 这个时候就给 null 
        // 1. 简单数据类型 是存放在栈里面 里面直接开辟一个空间存放的是值
        // 2. 复杂数据类型 首先在栈里面存放地址 十六进制表示  然后这个地址指向堆里面的数据
    </script>
</head>

<body>

</body>

</html>

将来オブジェクトとして格納する予定の変数があり、それを何に入れるかわからない場合は、現時点で、「null
単純データ型」のスタックに直接格納します。時間値の
単純なデータ型を格納するためのスペースを開きます。スタックに格納されます。スタックに格納されるスペースは、時間値を格納するために直接開かれます。
複雑なデータ型は、最初にアドレスを16進数でスタックに格納し、次にこのアドレスは、ヒープ内のデータを指します。
単純なデータ型:スタックに格納され、格納用のスペースを直接開きます。時間値
複雑なデータ型:最初に16進数で表されたアドレスをスタックに格納し、次にこのアドレスを格納します。ペアのデータを指す

28-単純なデータ型パラメーターの受け渡し

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script>
        // 简单数据类型传参
        function fn(a) {
    
    
            a++;
            console.log(a);
        }
        var x = 10;
        fn(x);
        console.log(x);
    </script>
</head>

<body>

</body>

</html>

function fn(a){a ++; console.log(a);}
function Person(name){this.name = name;}
function f1(x){console.log(x.name); x.name="张学友'; console.log(x.name);}
関数f1(x)【console.log(x.name); x.name="张学友'lconsole.log(x.name);}

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script>
        // 复杂数据类型传参
        function Person(name) {
    
    
            this.name = name;
        }

        function f1(x) {
    
     // x = p
            console.log(x.name); // 2. 这个输出什么 ?  刘德华   
            x.name = "张学友";
            console.log(x.name); // 3. 这个输出什么 ?   张学友
        }
        var p = new Person("刘德华");
        console.log(p.name); // 1. 这个输出什么 ?   刘德华 
        f1(p);
        console.log(p.name); // 4. 这个输出什么 ?   张学友
    </script>
</head>

<body>

</body>

</html>

function Person(name){this.name = name;}
function f1(x){console.log(x.name); x.name =“张学友”; console.oog(x.name);}

JavaScriptの単純型と複雑型

1.単純型と複雑型

単純型は基本データ型または値型とも呼ばれ、複合型は参照型と呼ばれます。
値型:単純データ型/基本データ型、値自体は格納時に変数に格納されるため、値型
文字列、数値、ブール値、未定義、null
参照型と呼ばれます:複合データ型、変数のみ保存時間に格納アドレス(参照)であるため、参照データ型と呼ばれ
ます。Object、Array、Dateなどの新しいキーワードによって作成されたオブジェクト(システムオブジェクト、カスタムオブジェクト)。

単純型は基本データ型、値型とも呼ばれ、複合型は参照疲労と呼ばれます。
値型:単純データ型、基本データ型、およびストレージ変数に格納された値自体
。唯一の時間アドレス、参照データ型、新しいキーワードによって作成されたオブジェクトシステムオブジェクト、カスタムオブジェクトObject、Array、Date;
2.
ヒープとスタックのスタックスペース割り当ての違い:
  1。スタック(オペレーティングシステム):オペレーティングシステムによって自動的にパラメータ値を割り当てて解放します関数の値、ローカル変数の値など。その操作方法は、データ構造のスタックに似ています。
単純なデータ型はスタック
  2に格納されます。ヒープ(オペレーティングシステム):一般にプログラマーによって割り当てられ解放される複合型(オブジェクト)を格納します。リリースではなく、ガベージコレクションメカニズムのリサイクル。
複素数データ型はヒープに格納されます
スタック:関数のパラメータ値とローカル変数の値は、オペレーティングシステムによって自動的に割り当てられ、解放されます。操作方法は
ヒープに似ています:オペレーティングシステムは複素数型を格納しますオブジェクトは、通常、プログラマーによって割り当てられ、解放されます。複素数型オブジェクトを格納するオペレーティングシステムは、通常、プログラマーによって使用されます
ここに画像の説明を挿入
。注:JavaScriptにはスタックの概念はありません。スタックの方法により、簡単になります。誰もがコードのいくつかの実行方法を理解するために、これは将来他の言語を学ぶのに便利です。
JSにはスタックの概念はありません。

3.単純なタイプのメモリ割り当て

値の型(単純なデータ型):文字列、数値、ブール値、未定義、null
値の型の変数のデータは、変数(スタックスペース)に直接格納されます
string、number、boolea、undefined、null
string、number、boolean、undefined 、null

ここに画像の説明を挿入
型変数のデータは変数スタックスペースに直接格納されます値型変数のデータは変数スタックスペースに直接格納されます

4.複合型のメモリ割り当て

参照型(複雑なデータ型):Object、Array、Date、その他の
参照型変数(スタックスペース)などの新しいキーワードによって作成されたオブジェクト(システムオブジェクト、カスタムオブジェクト)はアドレスを格納し、実際のオブジェクトインスタンスは参照型に格納されますヒープスペース内
:複雑なデータ型、新しいキーワードによって作成されたオブジェクト、システムオブジェクト、カスタムオブジェクト、オブジェクト、配列、日付
オブジェクト、配列、日付
参照型(複雑なデータ型)新しいキーワードによって作成されたオブジェクト、システムオブジェクト、カスタムオブジェクト、オブジェクト、配列、日付
参照型変数、スタックスペースに格納されている時刻アドレス、実オブジェクトインスタンスはヒープスペースに格納されています
ここに画像の説明を挿入
参照型(複合データ型):新しいキーワードによって作成されたオブジェクト(システムオブジェクト、カスタムオブジェクト) 、Object、Array、Dateなど
。アドレスは参照型変数(スタックスペース)に格納され、実際のオブジェクトインスタンスはヒープスペースに格納されます。
参照型:複合データ型:新しいキーワードによって作成されたオブジェクト、システムオブジェクト、カスタムオブジェクトオブジェクト、ArraymDate
参照型変数、スタックスペースに格納されている時間アドレス、実オブジェクトインスタンスはヒープスペースに格納されています

5.単純型パラメーターの受け渡し

関数の仮パラメーターも変数と見なすことができます。値型変数をパラメーターとして関数の仮パラメーターに渡す場合、実際にはスタックスペース内の変数の値を仮パラメーターにコピーしてから、メソッド内内部パラメータを変更しても、外部変数には影響しません。

function fn(a) {
    
    
    a++;
    console.log(a); 
}
var x = 10;
fn(x);
console.log(x)

関数fn(a){a ++; console.log(a);}
var x = 10;
fn(x);
console.log(x);
function fn(a){a ++; consolelog(a);}
var x = 10;
fn(x);
console.log(x);

6.複合型パラメーターの受け渡し

関数の仮パラメーターも変数と見なすことができます。参照型変数を仮パラメーターに渡すと、実際には、スタックスペース内の変数によって保存されたヒープアドレスが仮パラメーターにコピーされます。実際のパラメータは実際に保存されます。同じヒープアドレスであるため、同じオブジェクトが操作されます。

関数の仮パラメーターも変数と見なすことができます。参照型変数を仮パラメーターに渡すと、スタックスペースの変数によって保存されたヒープアドレスが実際に仮パラメーターにコピーされます。実際のパラメータが保存されます同じヒープアドレス、操作時の同じオブジェクト

function Person(name) {
    
    
    this.name = name;
}
function f1(x) {
    
     // x = p
    console.log(x.name); // 2. 这个输出什么 ?    
    x.name = "张学友";
    console.log(x.name); // 3. 这个输出什么 ?    
}
var p = new Person("刘德华");
console.log(p.name);    // 1. 这个输出什么 ?   
f1(p);
console.log(p.name);    // 4. 这个输出什么 ?  

関数の仮パラメーターも変数と見なすことができます。参照型変数を仮パラメーターに渡すと、実際には、スタックスペース内の変数によって保存されたヒープアドレスが仮パラメーターにコピーされます
。関数も表示されます。これは変数です。参照型変数を仮パラメーターに渡すと、スタックスペースの変数によって保存されたヒープアドレスが実際に仮パラメーターにコピーされます。
実際には、保存されたヒープアドレスがコピーされます。スタックスペース内の変数から仮パラメーターへ。仮パラメーター、仮パラメーター、および実パラメーターは実際には同じヒープアドレスを保存するため、操作は同じオブジェクトです。

おすすめ

転載: blog.csdn.net/weixin_43428283/article/details/124179020
おすすめ