2017-02-05 6 views
2

私はこれがn00bの質問だと確信していますが、私は全く新しいjavascriptです。私はなぜこのコードは "こんにちは"を印刷するのだろうかと思っていますが、私は最初の関数をコメントアウトすると、それは2番目の関数を使って他の2つの単語を出力します。これはどういう意味ですか?なぜこれらの2つのJavaScript関数がうまくいかないようです...私は間違っていますか?

var function1 = createFunction(); 
 
function createFunction() 
 
{ 
 
    console.log("hello"); 
 
} 
 
function1(); 
 

 
function createFunctionPrinter(word) 
 
{ 
 
    console.log(word); 
 
} 
 

 
var printSample = createFunctionPrinter('sample'); 
 
var printNoo = createFunctionPrinter('noo'); 
 

 
printSample(); //should console.log('sample'); 
 
printNoo(); //should console.log('noo');

答えて

3

function1createFunctionは何return文を持っていないためundefinedあるcreateFunctionを呼び出しの戻り値です。

undefinedは関数ではないため、function1()を呼び出すと例外が発生し、実行が停止します。

+0

おお、大丈夫...しかし、私はそれがコンソールに印刷してもらうことになっています。どうすればいいのですか? –

+0

'createFunction'はすでにコンソールに出力します。 'undefined 'でないものを返す場合は、単に' return'文を追加してください。 – Quentin

+0

申し訳ありませんが、私は私の質問ではっきりしていませんでした。私はコンソールに印刷する関数の内部から関数を返そうとしています。私はfunction createFunction()のようなことを試みました。 { return innerfunction(){console.log( "hello");} } function1();それでもまだ動作していません。 –

1

メソッドを参照する場合は、undefinedを返すので、()のままにしてください。

簡単にする必要がありfunction1createFunction()を修正

function createFunction() 
 
{ 
 
    console.log("hello"); 
 
} 
 
var function1 = createFunction; 
 
function1(); 
 

 
function createFunctionPrinter(word) 
 
{ 
 
    console.log(word); 
 
} 
 

 
var printSample = createFunctionPrinter; 
 
var printNoo = createFunctionPrinter; 
 

 
printSample('sample'); //should console.log('sample'); 
 
printNoo('noo'); //should console.log('noo');

1

この例を参照してくださいには、引数が、このために必要とされていない事実を提供します。単にvar function1 = createFunction()なしで設定すると、function1createFunctionと同じように機能の名前のようになります。

createFunctionPrinter()は少し異なります。私の好ましい方法は、prototypeの使用です。このメソッドは、呼び出されたときに引数(word)を受け取り、print()メソッドを呼び出すと、基本的にテキストを出力します。 printSampleprintNooの割り当ては似ていますが、newキーワードを使用する必要があります。最後に、関数を印刷するには、printSample.print()のようなものを使用します。

function createFunction() { 
 
    console.log("hello"); 
 
} 
 

 
function createFunctionPrinter(word) { 
 
    this.word = word; 
 
    this.print = function() { 
 
    console.log(word); 
 
    } 
 
} 
 

 
var function1 = createFunction; 
 
function1(); 
 

 
var printSample = new createFunctionPrinter('sample'); 
 
var printNoo = new createFunctionPrinter('noo'); 
 

 
printSample.print(); 
 
printNoo.print();

P.S:これはプロトタイプの使用目的ではないかもしれないが、私はそれがこのケースでそれらを使用するためにあなたの人生を容易にすると信じています。

0

var function1 = createFunction(); 
 

 
function createFunction() 
 
{ 
 
    // return a function that prints a message 
 
    return function() { 
 
     console.log("hello"); 
 
    } 
 
} 
 

 
function1();

関連する問題