2017-04-15 7 views
-1

2つの引数を関数に渡す配列設定があります。しかし、console.logを使用すると例外が発生します。パラメータから引数を取り除くと、それが実行されますが、これは何らかの理由であり、どうやって修正するのでしょうか?Javascript Uncaught TypeError:未定義(配列を使用)のプロパティ '長さ'を読み取ることができません

var musicians = ["Paul", "John", "Yuri"]; 

var instruments = ["Drums", "Guitar", "Chelo"]; 

function theBeatlesPlay(musicians, instruments) { 

    var empty = []; 

    for (var i = 0; i < **musicians.length**; i++) { 

     var str = musicians[i] + " plays " + instruments[i]; 
     empty = str; 
     **console.log(empty)**; 
    } 
    } 

    theBeatlesPlay(); 
+0

呼び出すメソッドに引数を渡していませんでした。 –

+0

プログラムをデバッグしてください。 'for'文にブレークポイントを置きます。あなたがそこで止まると、「ミュージシャン」の価値を調べます。本当に難しいと思う。 –

+0

リンターは手がかりを提供します。たとえば、「ミュージシャン」と「楽器」は宣言されていますが使用されていないと報告する可能性があります。関数スコープの** shadow **変数が外側スコープで使用されていると報告する人もいます。 –

答えて

2

関数に引数を渡す必要があります。

theBeatlesPlay(musicians, instruments);

var musicians = ["Paul", "John", "Yuri"], 
 
    instruments = ["Drums", "Guitar", "Chelo"]; 
 

 
function theBeatlesPlay(musicians, instruments) { 
 
    var empty = []; 
 
    for (var i = 0; i < musicians.length; i++) { 
 
    var str = musicians[i] + " plays " + instruments[i]; 
 
    empty = str; 
 
    console.log(empty); 
 
    } 
 
} 
 

 
theBeatlesPlay(musicians, instruments);

0

あなたの問題は、関数に引数を渡すされていないということです。 関数を使用する正しい方法は、まず、関数を呼び出すコード、関数を次に呼び出します。あなたはより多くの機能を使用する場合は、あなたが何をしているかを見失うか悪いますエラーを取得するために開始します、

var musicians = ["Paul", "John", "Yuri"]; 
 

 
var instruments = ["Drums", "Guitar", "Chelo"]; 
 

 
var errlog = theBeatlesPlay(musicians, instruments); 
 

 
console.log(errlog); 
 

 
function theBeatlesPlay(musicians_val, instruments_val) { 
 

 
var empty = []; 
 

 
for (var i = 0; i < musicians_val.length; i++) { 
 

 
var str = musicians_val[i] + " plays " + instruments_val[i]; 
 
     empty = str; 
 
     
 
    } 
 
    return empty; 
 
} 
 

 

+0

問題の内容とその修正方法を常に説明すること。 –

0

説明:あなたはパラメータを持つ関数を宣言すると、これらのパラメータはローカルになりますもの。

  1. :これは2つの方法がありますが、名前musiciansinstrumentsといくつかの変数を持っている場合でも、関数内に同じ名前のパラメータがまだあなたの問題を解決するにはローカル

    として扱われることを意味します

    関数宣言文のパラメータを削除します(関数の外で宣言された変数にアクセスしたいので、関数のパラメータは必要ありません)。

  2. それに以前に宣言二つの配列を渡す機能を呼び出します

    /* 
        musicians and instruments variables are LOCAL for the function in this case 
    */ 
    function theBeatlesPlay(musicians, instruments) { 
    
        var empty = []; 
    
        for (var i = 0; i < musicians.length; i++) { 
    
         var str = musicians[i] + " plays " + instruments[i]; 
         empty = str; 
         console.log(empty); 
        } 
    } 
    
    theBeatlesPlay(musicians, instruments); 
    

私も強く、それは最初は空ですbecuase emptyような変数に名前を付けていないあなたをお勧めします。それ以外の場合は定数にする必要があります。

ところで、どのようなタイプの例外がスローされ、どのメッセージが提供されるのかを分析すると便利です。

関連する問題