2017-12-04 22 views
-1

私は第3章 - 機能Eloquent Javascriptに入っています。サブ関数にreturn文がありませんか? [Javascript]

次のコードに関するすべてが私にとって意味のあるものです。

なぜ、より良い用語がないためにサブ関数にreturn文がありませんか?

var landscape = function() { 
var result = ""; 
var flat = function(size) { 
    for (var count = 0; count < size; count++) 
     result += "_"; 
    }; 
    var mountain = function(size) { 
    result += "/"; 
    for (var count = 0; count < size; count++) 
     result += "'"; 
    result += "\\"; 
    }; 

    flat(3); 
    mountain(4); 
    flat(6); 
    mountain(1); 
    flat(1); 
    return result; 
}; 

console.log(landscape()); 
// → ___/''''\______/'\_ 

たぶん私も異なるソースから異なる定義を読んだ後、return文の目的についての根本的な何かが欠けています。

サブ関数にreturn文を追加しようとしました。私はそれがサブ機能をあらかじめ成熟させて終わらせるか、それとも決してそこになかったかのように同じ結果を生み出すことに気がつきました。

読んでいただきありがとうございます。

+0

サブ関数は個々の結果を持たない(単に 'result'変数を操作します)。あなたはどのような価値を返すと思いますか、それを通話場所でどのように使用しますか? – Bergi

+0

関数に 'return'ステートメントは必要ありません。実行がボディの終わりに達すると、関数を終了するだけです(そして 'undefined'を返します)。 – Bergi

+0

@Bergiさて、いくつかの定義を読み、いくつかの例を見ても、値を返すことが何を意味するのかがわかりませんでした。それは今明らかになっています。 @ suren-srapyanの答えと例が出るまで、私は外部スコープと関数スコープの変数の概念に触れていませんでした。 Surenの投稿の後でさえ、私はあなたのコメントを読むまで、まだそれを理解していませんでした(「サブ関数は個々の結果を持たない(単に 'result'変数を操作するだけです)。 ! – Oiohwah

答えて

2

彼らは外側のスコープ変数resultにアクセスしていて、そこに何か変更しています。したがって、実際のresult変数の値が変更され、何も返す必要はありません。関数の終わりに達すると、関数は終了します。ローカルの関数スコープ変数を作成してそれらから文字列を作成し、それを返して、メインのlandscape関数で連結することによっても同じことができます。

は、あなたのサブ機能は、あなたのグローバル風景変数に影響を与えるのでreturn文

var landscape = function() { 
 

 
    var result = ""; 
 

 
    var flat = function(size) { 
 
    var localFlat = ''; // Function scoped variable 
 
    for (var count = 0; count < size; count++) { 
 
     localFlat += "_"; 
 
    } 
 
    return localFlat; // Return function scoped variable 
 
    }; 
 
    
 
    var mountain = function(size) { 
 
    var localMountain = "/"; // Function scoped variable 
 
    for (var count = 0; count < size; count++) { 
 
     localMountain += "'"; 
 
    } 
 
    localMountain += "\\"; 
 
    return localMountain; // Return function scoped variable 
 
    }; 
 

 
    result = flat(3) + mountain(4) + flat(6) + mountain(1) + flat(1); // Concatenate the results of each function 
 

 
    return result; 
 
}; 
 

 
console.log(landscape());

0

であなたのコードの代替を参照してください - をもたらし、最終的には、関数の戻り値の結果変数..この例は、グローバル変数をサブ関数に変更できることを示しています。

関連する問題