Javascript代码执行顺序陌生 [英] Javascript code execution order strangeness

查看:128
本文介绍了Javascript代码执行顺序陌生的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一段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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆