2017-02-09 35 views
1

Javascriptの関数呼び出しの結果、オブジェクトが作成されますか?

function f(){} 

f(); 

関数f()

は、さらに機能の実行は、新しいオブジェクトを作成します(これのプロトタイプオブジェクトと一緒に)関数オブジェクトがメモリ内に作成される定義されている場合、のは言わせて?はいの場合、それは何ですか?

EDIT:

私は( "foo" という)x.setNameを呼び出す

function f(){ 
    var name=""; 
    out = { 
     getName: function(){return name;}, 
     setName: function(newName){name = newName} 
    }; 
    return out;}; 

var x= f(); 

var y = f(); 

JavaScriptで実装モジュールパターンを理解しようとしています。 y.getName()の値には影響しません。

ここで実際には、どのオブジェクトにもxおよびyに格納されている変数名はありませんか?

+0

関数実行のコンストラクタモードでは、確実に新しいオブジェクトが作成されます。関数を実行しないコンストラクタモード、つまりf()は新しいオブジェクトを作成しますか? –

+0

はクロムのプロファイリング機器を使って調べるのが簡単なはずです – alebianco

+0

関数/ルーチンの隣に ''() ''を置くと、 '' f''が宣言された後にストリームがクローズされます。 – Crowes

答えて

1

編集した質問は最初のバージョンとまったく異なります。 この場合、fを実行するたびに明示的に新しいオブジェクトを作成します。返されるオブジェクトは毎回異なります。あなたがそうならば

var x= f(); 

var y = f(); 

xはyとは異なります。

+0

私はお詫び申し上げます。今私は正しい質問をしなかったことを理解しています。私は新しい質問をします。助けをありがとう –

+0

心配しないで、歓迎です!それが解決されていると答えてください:) –

1

確かに、定義では、変数がスコープに含まれるオブジェクトが作成され、そのオブジェクトがスコープチェーンに追加されます。 実行時にスコープチェーンを呼び出し、現在のスコープ(既に存在する関数のスコープチェーン)に追加します。関数を呼び出すとオブジェクトが作成されません

+0

私はJavascriptで実装されたモジュールパターンを理解しようとしています......... function f(){var name = ""; out = {getName:function(){return name;}、setName:function(newName){name = newName}};返す;}; var x = f(); var y = f(); .............. x.setName( "foo");を呼び出します。 y.getName()の値には影響しません.....実際にはxとyに格納されている変数名は実際にはどのオブジェクトにもありません –

+0

意図してください.. –

+0

JavaScriptで実装されたモジュールパターンを理解しようとしています '関数f(){ var name =" "; out = {getName:function(){return name;}、setName:function(newName){name = newName}}; リターンアウト;}; var x = f(); var y = f(); ' x.setName(" foo ")を呼び出します。 y.getName()の値には影響しません.....実際にはxに格納された変数名はどこにありますかオブジェクトにない場合はyです –

関連する問題