[解決済み】JavaScriptで変数を参照渡しにする
質問
JavaScriptで変数を参照渡しにするには?
いくつかの処理を行いたい変数が3つあるので、それらをforループに入れ、それぞれに対して処理を行いたいのです。
疑似コードです。
myArray = new Array(var1, var2, var3);
for (var x = 0; x < myArray.length; x++){
// Do stuff to the array
makePretty(myArray[x]);
}
// Now do stuff to the updated variables
どうすればいいのでしょうか?
どのように解決するのですか?
JavaScriptには参照渡しがありません。オブジェクトを渡して(つまり、オブジェクトへの参照を値で渡して)、関数にそのオブジェクトの内容を変更させることは可能です。
function alterObject(obj) {
obj.foo = "goodbye";
}
var myObj = { foo: "hello world" };
alterObject(myObj);
alert(myObj.foo); // "goodbye" instead of "hello world"
数値インデックスを持つ配列のプロパティを反復処理し、配列の各セルを変更することができますよ。
var arr = [1, 2, 3];
for (var i = 0; i < arr.length; i++) {
arr[i] = arr[i] + 1;
}
ここで重要なのは、quot;参照渡しというのは非常に特殊な用語であるということです。これは、単に変更可能なオブジェクトへの参照を渡すことができるという意味ではありません。そうではなく、単純な変数を渡して、関数がその値を 呼び出し のコンテキストになります。 だから
function swap(a, b) {
var tmp = a;
a = b;
b = tmp; //assign tmp to b
}
var x = 1, y = 2;
swap(x, y);
alert("x is " + x + ", y is " + y); // "x is 1, y is 2"
C++のような言語では、それが可能なのは、その言語が が行います。 (一種の)参照渡しがあります。
編集 - というのは、最近(2015年3月)、後述の私のブログと似たような記事をめぐって、Redditで再び大爆発しました(この場合はJavaに関するものですが)。Redditのコメントのやり取りを読んでいて、この混乱の大部分は、"reference"という単語を含む不幸な衝突に起因していることに思い当たりました。参照渡し」と「値渡し」という用語は、プログラミング言語において「オブジェクト」を扱うという概念よりも古いものです。これはオブジェクトの問題ではなく、関数のパラメータ、特に関数のパラメータが呼び出し環境にどのように接続されるか(または接続されないか)の問題なのです。特に、真の参照渡し言語、すなわち する。 オブジェクトが関係する場合でも、オブジェクトの 内容 また、見た目もJavaScriptとほぼ同じになります。しかし また は、呼び出し側の環境でオブジェクトの参照を変更することができます。 はできません。 JavaScriptでは 参照渡しの言語では 参照そのものを渡すのではなく 参照への参照 .
編集 - に関するブログ記事を紹介します。 (C++には参照渡しがないことを説明するその投稿のコメントに注目してほしい。 その通りだ。しかし、C++には、関数呼び出しの時点で明示的にポインターを作成するか、または、C++の変数への参照を作成する機能があります。 暗黙のうちに 引数の型シグネチャがそれを要求している関数を呼び出すとき。これらは、JavaScriptがサポートしていない重要な点です)。
関連
-
[解決済み】Uncaught TypeError: nullのプロパティ'value'を読み取ることができない
-
[解決済み】XMLHttpRequestモジュールが定義されていない/見つからない
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み】ETIMEDOUTエラーの対処方法は?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] JavaScriptの変数のスコープとは何ですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】このエラーの原因は何ですか - "Fatal error: ローカルgruntを見つけることができません"
-
[解決済み】webpack-dev-serverにリモート接続すると、「Invalid Host header」というメッセージが表示されます。
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】Javascriptのコールバック関数がFirefoxで「Callback is not a function」というエラーを投げる
-
[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
-
[解決済み] エラー。モジュールhtmlが見つからない
-
[解決済み】JS ファイルが net::ERR_ABORTED 404 (Not Found) を取得する)
-
[解決済み】Jestが予期しないトークンに遭遇した
-
[解決済み】未定義のプロパティ 'forEach' を読み取ることができない
-
[解決済み】Javascript、[オブジェクトHTMLInputElement]を表示中。]