JavaScript 上級プログラミング: 変数とスコープ

JavaScript 上級プログラミング: 変数とスコープ

1. 元の値と参照値

6 つの単純なデータ型の値はすべてプリミティブ値です。プリミティブ値が変数を介して別の変数に割り当てられると、新しい値がコピーされ、2 つは互いに独立しています。

num1 = 5とする
num2 = num1とする


参照値が変数を介して別の変数に割り当てられると、値もコピーされます。この値は実際にはポインター (参照) であり、ポインターは引き続き同じオブジェクトを指します。

obj1 = 新しいオブジェクト()

obj2 = obj1とする

これらは同じ参照オブジェクトを指しているため、 obj1にプロパティを追加すると、 obj2も影響します。

obj1.name = "張さん"

console.log(obj2.name) // 張さん


関数にパラメータを渡す場合、パラメータが値で渡される状況は 1 つだけあり、これは変数を割り当てる場合と同じです。ただし、参照値の場合、渡される値はポインターですが、ポインターは依然として同じオブジェクトを指します。

2. インスタンス

typeofは一般にプリミティブ値の判定には適していますが、 nullやその他のオブジェクトがオブジェクトを返し、オブジェクトの特定の型が不明であるため、参照値には適していません。 参照値がどのタイプのオブジェクトであるかを判断する最良の方法は、 instanceof式を使用することです。

console.log(1 インスタンスのオブジェクト) //false
obj = new Object();
console.log(obj インスタンスオブオブジェクト) //true
console.log(null インスタンスオブオブジェクト) //false



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

console.log([] インスタンスオブオブジェクト) //true
console.log([] 配列のインスタンス) //true

3. 範囲

変数のスコープは、スコープまたは実行コンテキストと呼ばれます。変数はスコープ外では見えなくなります。すべてのシステムには、変数を検索するときにスコープ チェーンがあります。まず、その変数を参照する最も近いブロック スコープで変数を検索します。見つからない場合は、外側のローカル スコープで検索を続けます。それでも見つからない場合は、グローバル スコープで検索します。見つからない場合は、エラーReferenceError: xxx is not defined報告されます。

高度な JavaScript プログラミングにおける変数とスコープに関するこの記事はこれで終わりです。JavaScript 変数とスコープの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JavaScriptの変数スコープについて学ぼう
  • JavaScript の変数スコープの詳細な説明
  • JavaScript での変数宣言をご存知ですか?
  • JavaScript における変数と関数の昇格の詳細な例
  • JavaScript でローカル変数をグローバル変数に変換する方法
  • JavaScript 変数と変換の詳細

<<:  Synology NAS は Docker コンテナを使用して KMS アクティベーション サーバーを構築し、Windows システムとオフィスをアクティベートします (操作手順)

>>:  テーブルタグ(TAGS)の詳細な紹介

推薦する

React Fiberの仕組みの詳細な説明

目次React Fiberとは何ですか?なぜReact Fiberなのか? React Fiberは...

MySQL 8.0.12 解凍版インストールチュートリアル個人テスト!

Mysql8.0.12 解凍版のインストール方法をテストしましたので、ご参考までに1. ダウンロー...

ReactとAntdのFormコンポーネントを組み合わせてログイン機能を実装する方法を詳しく説明します

目次1. ReactとAntdを組み合わせてログイン機能を実現2. ReactとAntdを組み合わせ...

JS Canvas インターフェースとアニメーション効果

目次概要Canvas API: グラフィックスの描画パス線種矩形アーク文章グラデーションと画像の塗り...

HTML のキャンバスに基づくスクリーンショットのデモ

冒頭に書いた以前、Renren で JS ベースのスクリーンショット ソリューションについて説明した...

初心者のためのWebサイト構築入門 ③ エイリアス(CNAME)レコードとURL転送

①. エイリアス(CNAME)レコードの使用方法:前回の投稿のドメイン名解決では、A レコードの解...

JavaScript スネーク実装コード

この記事の例では、参考までに貪欲なスネークを実装するためのJavaScriptの具体的なコードを共有...

jsは古典的なマインスイーパゲームを実装します

この記事の例では、古典的なマインスイーパゲームを実装するためのjsの具体的なコードを参考までに共有し...

HTML で div を非表示にする テーブルを非表示にする TABLE または DIV コンテンツの CSS スタイル

今夜、数日間悩まされていた問題を解決しました。本当に解決したかどうかはわかりませんが、解決されている...

新しい ECMAscript オブジェクト機能の紹介

目次1. オブジェクトのプロパティ1.1 属性表記2. プロパティ名を計算する3.オブジェクトメソッ...

CSS3 フレックスボックス自動記入の書き方を詳しく解説

この記事では、主に CSS3 フレックス エラスティック ボックスの自動塗りつぶしの書き方について詳...

Vueデータ双方向バインディング実装方法

目次1. はじめに2. コードの実装2.1 目的分析2.2 実装プロセス2.2.1 エントリーコード...

Nginx URL 書き換えメカニズムの原理と使用例

URL 書き換えは、Web サイトの優先ドメインを決定するのに役立ちます。同じリソース ページの複数...

MySQL の count()、group by、order by の詳細な説明

最近、IM を実行するときに、これらの 3 つのキーワードを同時に使用したときに問題が発生しました。...

Dockerは指定されたメモリで操作を実行します

次のように: -m, --memory メモリ制限。形式は数値と単位です。単位は b、k、m、g の...