2016-03-28 4 views
0

JavaScriptのメイン関数内に関数をネストすることはできますか?私はいくつかのコードで遊んでいましたが、スクリーンに何かを表示する機能がありません。関数内で関数をコーディングするにはどうすればよいですか?

function main() { 
    var crew; 
    var crewMemberWeight = 113; 
    var winterWeight = 2.8; 
    var winter = false; 
    var capacity = 24000; 
    var cargo = [1000, 5500, 2000, 3500, 4000, 7000]; 

    function cargoWeight(cargo) { 
     total = 0; 
     for(var i = 0; i < cargo.length; i++) { 
      total += cargo[i]; 
     } 
     document.write("Cargo weight: " + total); 
     return total; 
    } 
} 

main(); 
+9

あなたはどこでも 'cargoWeight'を呼び出しません。 –

+0

ああ、申し分なく。下の主な機能を呼び出すと、その中の機能も呼び出されると私は考えていました。 – Nick

+1

そのような場合であっても、あなたの関数はどこにも定義されていない 'load'の引数を受け取り、失敗するでしょう。 –

答えて

2
function main() { 
    var crew; 
    var crewMemberWeight = 113; 
    var winterWeight = 2.8; 
    var winter = false; 
    var capacity = 24000; 
    var cargo = [1000, 5500, 2000, 3500, 4000, 7000]; 

    function cargoWeight(cargo) { 
     total = 0; 
     for(var i = 0; i < cargo.length; i++) { 
      total += cargo[i]; 
     } 
     document.write("Cargo weight: " + total); 
     return total; 
    } 

    // you have to call the function and pass in cargo. Not just define it 
    cargoWeight(cargo) 
} 

main(); 
0

あなただけのmain()の内部で、この内部関数を呼び出す必要があります。私はします:cargoWeight(cargo);最後の括弧の前に

0

最後にcargoWeight関数を呼び出す必要があります。あなたが貨物の変数を渡したいようなあなたのコードを見てみるとそれが見えます。

function main() { 
var crew; 
var crewMemberWeight = 113; 
var winterWeight = 2.8; 
var winter = false; 
var capacity = 24000; 
var cargo = [1000, 5500, 2000, 3500, 4000, 7000]; 

function cargoWeight(load) { 
    total = 0; 
    for(var i = 0; i < load.length; i++) { 
     total += load[i]; 
    } 
    document.write("Cargo weight: " + total); 
    return total; 
} 
cargoWeight(cargo); 
} 

main(); 
0

JavaScriptで関数内で関数を定義することが可能です。ただし、そうすると、そのネストされた関数は親関数の内部からのみ呼び出すことができます。したがって、別の別の関数を記述した場合、その別の関数からcargoWeight()を呼び出すことはできません。

function main() { 
    var crew; 
    var crewMemberWeight = 113; 
    var winterWeight = 2.8; 
    var winter = false; 
    var capacity = 24000; 
    var cargo = [1000, 5500, 2000, 3500, 4000, 7000]; 

    function cargoWeight(load) { 
     total = 0; 
     for(var i = 0; i < load.length; i++) { 
      total += load[i]; 
     } 
     document.write("Cargo weight: " + total); 
     return total; 
    } 
} 

main(); 

function other(){ 
    cargoWeight(400) // can't call this method here 
} 

説明するが、JavaScriptのオブジェクトとクロージャに探してはなぜ、どのようにJavaScriptのがこのように動作します理解するために開始するには良い場所でしょう長いポストが必要になり、このためのアプリケーションがたくさんあります。

0

まず、 'cargoWeight(load)'を呼び出す必要があります。関数に引き込まれる 'load'も定義する必要があります。

あなたの意図は「貨物」配列を追加することだと思いますか? リンクフィドルを参照してください。

www.jsfiddle.net/natLuuy6

-1

をこのパーティーに遅れているが、「JavaScriptの初心者」には興味深いかもしれません。

function main() 
{ 
    var crew; 
    var crewMemberWeight = 113; 
    var winterWeight = 2.8; 
    var winter = false; 
    var capacity = 24000; 
    var cargo = [1000, 5500, 2000, 3500, 4000, 7000]; 

    function cargoWeight(cargoValues) { 
     return cargoValues.reduce((a, b) => a + b, 0); 
    } 

    document.write("Cargo weight: ", cargoWeight(cargo)); 
} 

main(); 
関連する問題