在可观察的笔记本中创建对象文字失败

Creating object literal fails in observable notebook

我正在尝试 运行 O'Reilly 的 "Learning React" 书中的这个简单代码片段在 Observable 笔记本 (https://observablehq.com/) 中。

如果我在 Chrome 控制台中 运行 它有效(我可以定义对象然后 运行 tahoe.print()),但是如果我尝试 运行 它在 Observable 中 SyntaxError: Unexpected Token 当 运行 连接单元格时我得到 SyntaxError: Unexpected Token

Observable 有什么奇怪的地方阻止我创建这样的对象字面量吗?

tahoe = {
  resorts: ["Kirkwood","Squaw","Alpine"],
  print: function(delay=1000) {
    setTimeout(() => {
      console.log(this.resorts.join(", "))
    }, delay)
  }
}

这是带有代码的笔记本:https://observablehq.com/@jritch/simple-snippet-breaks-in-observable

Blex 指出要使其正常工作,您需要将对象括在括号中:

tahoe = ({
  resorts: ["Kirkwood","Squaw","Alpine"],
  print: function(delay=1000) {
    setTimeout(() => {
      console.log(this.resorts.join(", "))
    }, delay)
  }
})

Working snippet

为了更全面地解释这是为什么,see this blogpost that outlines the differences between Observable and vanilla javascript

Statements need curly braces, and return (or yield). A cell body can be a simple expression, such as a number or string literal, or a function call. But sometimes you want statements, such as for loops. For that you’ll need curly braces, and a return statement to give the cell a value. Think of a cell as a function, except the function has no arguments. For the same reason, you’ll need to wrap object literals in parentheses, or use a block statement with a return.

单元格的播放按钮图标旁边还有一个(有点难看)魔术棒小部件,如果您单击它,它会自动修复此问题: