任何人都可以在他们的Node.js REPL上使用let语句吗?

时间:2013-11-14 01:23:33

标签: javascript node.js ecmascript-harmony

有可能吗?它似乎无法在我的REPL中工作,无论有没有--harmony

我真正想做的是使用for..of循环,但是让故障排除似乎更简单,可能是同样的原因。

任何人都知道这些的状态吗?

2 个答案:

答案 0 :(得分:8)

$ node --version
v0.10.13

有点神秘,你认为只有--harmony可以工作,但你需要在use strict某处添加(你可以在命令行中添加):

$ node --harmony --use-strict
> var letTest = function () {
...   let x = 31;
...   if (true) {
.....     let x = 71;  // different variable
.....     console.log(x);  // 71
.....   }
...   console.log(x);  // 31
... }
undefined
> letTest()
71
31
undefined
> 
很开心!

但是,我尝试了一个简单的of理解,但它不起作用:

[ square(x) for (x of [1,2,3,4,5]) ]

没有运气。看起来您可能必须go past the current stable release才能获得所有和声功能。

答案 1 :(得分:1)

如果从文件中运行它,node.js会告诉您错误:

SyntaxError: Illegal let declaration outside extended mode

它的详细信息在另一个问题What is extended mode?中给出。实际上,扩展模式是在严格模式下构建的,因此如果没有"use strict"和和谐标志,则不能使用它。我将引用here

的原因
  

回想一下,ES5定义了“严格模式”,这是JS的一种新的执行模式。   我们将其他模式称为“经典模式”。 ES6定义了第三个   “扩展模式”,它建立在严格模式之上,并启用新模式   特征

最近的节点v11.7具有允许您使用for of循环的迭代器。我使用的例子:

function* fibonacci() {
    let prev = 0, curr = 1, temp;
    for (;;) {
        temp = prev;
        prev = curr;
        curr = temp + curr;
        yield curr;
    }
}

for (let n of fibonacci()) {
    if (n > 1000)
        break;
    console.log(n);
}

目前,我只能使用for of而不是简单数组。