2017-12-17 12 views
0

Friends!Closure関数の出力に奇妙な "未定義"値を取得する

誰でも私に、出力文字列の末尾に余分な値「未定義」を与える理由を教えてください。

私は、おそらく間違い私のクローサー機能についての私のあまり明確な知識ではないと思います。 ^)

ありがとうございました。

function makeBuffer() { 
    var butterStin = ''; //local variable for storage buffer data 

    return function buffer(value) { 
     return butterStin += String(value); 
    }; 

} 

var buffer = makeBuffer(); 

buffer('Closures'); 
buffer(' Must'); 
buffer(' Use!'); 

console.log(buffer()); // Closures Must Use! 

出力の現在の結果:「!クロージャが使用しなければならないに未定義」

答えて

1

次の行なので:

console.log(buffer()); 

は、引数を指定せずにバッファ機能を呼び出しているので、valueは未定義です。

neccessary場合は、バッファ機能を変更することができます:

return function buffer(value) { 
    return typeof value === "undefined" ? bufferStin : butterStin += String(value); 
}; 
+1

おかげでたくさん!また条件を選択することもできますif(arguments.length == 0) –

関連する問題