Javascript代码执行顺序陌生

时间:2012-02-03 22:31:12

标签: javascript coffeescript

我有一段Javascript / Coffeescript似乎无序执行。

console.log list
console.log list[card_number]
if list[card_number]
  console.log "MATCHES"
  new_card = list[card_number]
else
  console.log "NO MATCHES"
  new_card = create_new_card(card_number)

create_new_card: (card_number) ->
  new_card =
    card_number: card_number
  list[new_card.card_number] = new_card
  return new_card

每次运行时,第一个console.log会显示包含new_card的卡片列表,即使尚未创建卡片。然后它总是命中else,无论它运行多少次。

如果我在此代码运行后尝试在Javascript控制台中运行list[<card_number>],我会收到正确的对象,但每次代码运行时,都会发生相同的事件。

3 个答案:

答案 0 :(得分:5)

在谷歌浏览器中,如果要记录具有日志记录状态的对象,则需要记录克隆对象或将其字符串化。

var a = [];
console.log(a);
a[0] = 3;

将记录[3],因为它记录了一个活动对象,而这将记录[]

var a = [];
console.log(JSON.parse(JSON.stringify(a)));
a[0] = 3;

它也是一个活动对象日志记录,但它是在a没有任何项目时克隆的一次性克隆。

这与@CallumRogers指出的代码中可能存在的逻辑错误无关。

答案 1 :(得分:1)

您的create_new_card功能有误 - 您拨打new_card.number而不是new_card.card_number,这会导致undefined被添加到列表中,从而导致您观察到的行为。正确的版本是:

create_new_card: (card_number) ->
  new_card =
    card_number: card_number
  list[new_card.card_number] = new_card
  return new_card

答案 2 :(得分:1)

您使用的是Chrome吗? console.log does not execute immediately。这是一种耻辱,但对我们来说太糟糕了。