有人能在Node.js REPL中使用let语句吗?

4

有可能吗?在我的REPL中似乎无论是否使用--harmony都无法正常工作。

我真正想做的是使用for..of循环,但let似乎更容易排除故障,原因很可能相同。

有人知道这些的状态吗?


嘿,你能在这个问题上标记答案吗? - jcollum
2个回答

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]) ]

没有成功。看起来你可能需要超过当前稳定版本才能获取所有的harmony特性。


@user568109,你在哪里找到的?我花了很长时间才找到那个信息,主要是因为其中一个关键词是“of”。 - jcollum
NodeJS使用V8引擎。V8的兼容性在此处列出:http://kangax.github.io/compat-table/es6/ - Gábor Imre

1
如果您从文件中运行它,node.js会告诉您错误:
SyntaxError: Illegal let declaration outside extended mode

这个问题的详细信息在另一个问题中给出 什么是扩展模式?。事实上,扩展模式是建立在严格模式之上的,因此您不能在没有"use strict"和harmony标志的情况下使用它。我将从这里引用原因:

回想一下,ES5为JS定义了“严格模式”,一种新的执行模式。让我们称另一种模式为“经典模式”。ES6定义了第三种“扩展模式”,它建立在严格模式之上,并启用了新功能。

最近的node 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 迭代器而不能使用简单的数组。


实际上不需要在代码中添加'use strict'指示。只需使用标志和harmony即可。 - Ciro Costa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接