2017-02-22 13 views
-1

私はCとC++言語に由来していますが、JavaScriptに関するいくつかのことを理解するのに苦労します。関数を入力するときにJavaScriptで変数(パラメータ)がコピーされますか?JavaScriptの引数とテンポラリ変数関数

C/C++では、引数は関数のために複製され、関数内で変更することはできません(もちろん、ポインタは引数として渡せますが、変更することはできません)。 JavaScriptでは、関数内で変数を宣言してから使用することができます(例えばクロージャ付き)。関数内のパラメータを変更することもでき、後でこれらの変更を保持します。

JavaScriptアプリケーションで実行コンテキストが1つしかないとすればいいですか?

+0

_In C/C++では、引数は関数のために複製され、function_内で変更することはできません。これは 'C'でも当てはまりますが、' C++ 'では引数の前に'& ' )、あなたのJavaScriptの質問に関する:[this](http://stackoverflow.com/a/7744623/1606345)助けることができます。 –

+0

C、C++およびJavascriptはすべて中括弧の言語ファミリの一部です。それは、それらの間の比較が可能な限り役立ちます。初心者としてJSを学ぶことをお勧めします。すべてのステップでCと比較すると、あなたはもっと混乱するでしょう。 – StoryTeller

答えて

1

Cでは、構造体を渡すことができます。値を指定すると、関数にコピーされます(返された場合はそれを返す)か、構造体にポインタを渡してコピーされますあなたが行ったすべての変更が発信者に表示されます。 C++では、背後ではポインタを渡すような参照で渡すことができることを除いて同じですが、コンパイラはそれを少し隠します。

Javascriptは、参照渡しのすべての構造体を取得していると考えてください。あなたが明示的にそれをコピーしない限り、何もコピーされません。

また、Javascript変数には変数にオブジェクトが含まれていないため、オブジェクトへの参照のみが含まれています。したがって、C/C++の用語では、すべてのオブジェクトがヒープベースであり、スタックにはオブジェクトが格納されていません。

数字のような単純なタイプの場合は、コピーが作成されている可能性がありますが、実際に何が行われても問題はありません。文字列はおそらく参照渡しされますが、既存の文字列を変更することはできないので、それを知らせる方法もありません。

私はおそらく、それは重要な呼び出しのセマンティクスであると言いますが、異なるJavascriptランタイムでは、違いを区別できない場合は、さまざまな方法で実装することができます。

+0

ありがとう、実際に私を助けてくれました。あなたの答えをチェックするのを忘れていた... –

関連する問題