Javascript代码执行顺序陌生 [英] Javascript code execution order strangeness
问题描述
我有一段Javascript / Coffeescript似乎正在执行顺序。
I have a section of Javascript/Coffeescript that seems to be executing out of order.
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
,无论它运行多少次。
Every time I run this, the first console.log
shows a list of cards that includes the new_card, Even if the card hasn't been created yet. Then it ALWAYS hits the else
, no matter how many times it is run.
如果我尝试运行 list [< card_number>]
在Javascript控制台运行后,我收到正确的对象,但每次代码运行它自己,同一事件发生。
If I attempt to run list[<card_number>]
in the Javascript console after this code runs, I receive the proper object, but each time the code runs on it's own, the same event happens.
推荐答案
在Google Chrome中,如果要记录对象的日志记录时的状态,一个克隆对象或只是stringify它。
In google chrome, if you want to log objects with the state they had at the time of logging, you need to log a clone object or just stringify it.
var a = [];
console.log(a);
a[0] = 3;
会记录 [3]
一个活动对象,而这将记录 []
:
Will log [3]
because it logs a live object, while this will log []
:
var a = [];
console.log(JSON.parse(JSON.stringify(a)));
a[0] = 3;
它也是一个活对象日志记录,但它是一个一次性克隆,当 a
没有任何项目。
It is also a live object logging but it is a throwaway clone that was cloned at the point in time when a
didn't have any items.
这与您的代码中可能的逻辑错误无关@CallumRogers指出。
This is not related to the possible logical errors in your code that @CallumRogers pointed out.
这篇关于Javascript代码执行顺序陌生的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!