0

私の目標は、引数として文字列を指定できる関数を作成し、項目を追加できる配列を作成できるようにすることです。ここで私の試みを見ることができますが、うまくいかないようです。別名、GroceryList というリスト名を作成したい場合、GroceryList が返されますが、項目を追加しようとすると、GroceryList が定義されていないと表示されます。

function removeInstance(list, item){
  for(var i = 0; i < list.length; i++){
    if(item === list[i]){
      list.splice(i, 1);
      console.log(list);
      break;
    }
  }
}
function makeList(name){
  name = [];
  console.log(name);
  return name;
}
function removeAllItems(list, item){
  for(var i = 0; i < list.length; i++){
    if(item === list[i]){
      list.splice(i, 1);
      i--;
    }
  }
  console.log(list);
}
function addItem(list, item){
    list.push(item);
    console.log(list);
}

どんな助けでも素晴らしいでしょう。ありがとう!

4

2 に答える 2

0

JavaScript 関数のパラメーターは、参照ではなく値で渡されます。したがって、このようなことをすると

var foo = 'bar';

function makeList(name){
  name = [];
  console.log(name);
  return name;
}

makeList(foo);
console.log(foo); // shows 'bar'

関数の外で宣言された変数を変更していません。パラメータへの変更は、そのローカル関数にのみ影響し、元の変数には影響しません。

とにかく、そのような makeList 関数が必要になる可能性のあるシナリオは考えられません。配列が必要な場合は、作成するだけです。これは必要ありません。

于 2015-10-26T23:33:34.343 に答える
0

この配列を作成するスコープが必要です。JavaScript を HTML ページに配置し、配列をグローバル スコープに入れたい場合、window オブジェクトのプロパティとして配列を作成できます。

function makeList(name){
   window[name] = [];
   return window[name];
}

次のように使用できます。

    var arr = makeList("myList");
    myList.push("hello");
    alert('item 0 = ' + myList[0]);
于 2015-10-26T23:33:38.820 に答える