如何一次执行一个JavaScript函数?

如何一次执行一个JavaScript函数?,javascript,Javascript,(我有点不确定如何表达我的问题。)我在学习了其他语言后才开始学习JavaScript,我已经对它的行为感到有点困惑。我写了这段代码: var todoList={ todo:[], display:function(){ console.log(this.todo); }, addItem:function(itemText){ this.todo.push({text:itemText,completed:false}); this.display();

(我有点不确定如何表达我的问题。)我在学习了其他语言后才开始学习JavaScript,我已经对它的行为感到有点困惑。我写了这段代码:

var todoList={
  todo:[],
  display:function(){
    console.log(this.todo);
  },
  addItem:function(itemText){
    this.todo.push({text:itemText,completed:false});
    this.display();
  },
  changeItem:function(index,newText) {
    this.todo[index].text=newText;
    this.display();
  }
};


todoList.addItem('item 1');
todoList.addItem('item 2');
todoList.changeItem(0, 'new item 1');
当我运行它时,由于
console.log()
语句,我希望在控制台中看到三个数组(我会看到)。我希望能看到展览

  • todoList.addItem('item 1')
    之后运行一个带有1项('item 1')的数组,然后
  • todoList.addItem('item 2')
    之后运行一个包含两个项目('item 1'、'item 2')的数组,并且
  • 更改后的数组中有两个项目('new item 1','item 2'),在todoList.changeItem(0,'new item 1')`之后
但是,我看到显示的是3个数组,但每个数组都有相同的项(“新项1”、“项2”)。这就好像所有代码都是在console.logged之前运行的


我遗漏了什么?

您的代码工作正常,但我认为您正在浏览器中运行它,当您在控制台输出中单击对象时,它会重新评估其值


试着打印它的长度。您将看到,首先您有1项,第二次和第三次有2项。例如,您也可以使用foreach遍历这些项目,并像这样打印其值。

您的代码工作正常,但我假定您正在浏览器中运行它,当您在控制台输出中单击对象时,它会重新评估其值


试着打印它的长度。您将看到,首先您有1项,第二次和第三次有2项。例如,您也可以使用foreach遍历项目,然后像这样打印其值。

我认为这应该可以通过每次打印实际项目而不是整个数组来解决您的问题:

var-todoList={
待办事项:[],
显示:函数(){
for(var i=0;itodoList.changeItem(0,“新项目1”)我认为这应该通过每次打印实际项目而不是整个阵列来解决您的问题:

var-todoList={
待办事项:[],
显示:函数(){
for(var i=0;itodoList.changeItem(0,“新项目1”)我怀疑您看到的是浏览器调试器的工件。通过对display函数进行调整,使其仅渲染每个数组元素的text属性,从而输出您所期望的内容。调试器可能正在对数组进行实时评估,以便在每次调用
log
时看到当前值。至少这是我在chrome上看到的。你是在哪个平台上运行这段代码的?我刚刚试着在chrome的开发者控制台上运行这个程序,它的工作原理和预期的一样。@PrajwalKulkarni我在Firefox的开发者控制台Windows上运行了代码10@asawyer是的,我调整为只显示文本属性,它确实输出了我所期望的内容。我怀疑您看到的是浏览器调试器的工件。通过对display函数进行调整,使其仅渲染每个数组元素的text属性,从而输出您所期望的内容。调试器可能正在对数组进行实时评估,以便在每次调用
log
时看到当前值。至少这是我在chrome上看到的。你是在哪个平台上运行这段代码的?我刚刚试着在chrome的开发者控制台上运行这个程序,它的工作原理和预期的一样。@PrajwalKulkarni我在Firefox的开发者控制台Windows上运行了代码10@asawyer是的,我调整为只显示text属性,它确实输出了我所期望的结果,它不会将第三项添加到数组中。迂腐的注释-第三个调用会变异数组项实例,它不会将第三项添加到数组中。此响应与回答我问题的信息相结合。此响应与回答我问题的信息相结合。