電子書籍の厳選無料作品が豊富!

関数内で作成した変数を別の関数で利用したいのですが、console.log(obj.tmp);だけがundefinedになってしまいます。なぜこのようになるのでしょうか。わかる方ご指摘お願い致します。

function input () {
var a = 1;
var tmp = [
  {
   name: '名前',
   address: '住所',
   coordinate: 123456789,
   discription: "説明"
  }
 ];
console.log(a); 
console.log(tmp);
return {a};
return {tmp};
}

function output () {
var obj = input();
console.log(obj.a);
console.log(obj.tmp);
}

output();

A 回答 (2件)

return {a}; でinput()から抜けてしまうので、その後のreturn {tmp};は実行されていないためです。


以下のようにすれば両方取得できます。

function input () {
var a = 1;
var tmp = [
  {
   name: '名前',
   address: '住所',
   coordinate: 123456789,
   discription: "説明"
  }
 ];
console.log(a);
console.log(tmp);
return {'a':a, 'tmp':tmp};
}

function output () {
var obj = input();
console.log(obj['a']);
console.log(obj['tmp']);
}

output();
    • good
    • 0

こんにちは



原因と対策はすでにNo1様がご指摘の通りですが・・・

>return {a};
>return {tmp};
通常 { } はオブジェクトリテラルの表記に用いられます。
オブジェクトは
 { key1:value1, key2:value2 }
の形式で表されますが、ご提示のスクリプトではそのような表記になっていませんので、一般的な記述法とは言えません。

ブラウザが単なる中括弧として解釈する場合は、
 return a;
 return tmp;
と同じと見做されるか、(二行目は実行されませんが)
あるいは、
 { a:a }
の短縮形として理解されるものと思われます。
(ブラウザに依存します)
https://developer.mozilla.org/ja/docs/Web/JavaSc …

ご提示の関数の場合に限って言えば、常にaの値は1で返されるので、returnする必要性を感じませんけれど。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!