0

我的目标是能够创建一个函数,您可以将字符串作为参数提供,并能够创建一个可以添加项目的数组。你可以在这里看到我的尝试,但它似乎不起作用。aka,如果我想创建一个列表名称 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 回答