Node.js 循环内部的const用法,为什么会出现这种行为?

Node.js 循环内部的const用法,为什么会出现这种行为?,node.js,ecmascript-6,Node.js,Ecmascript 6,我的nodejs代码中有一个for循环 const saveDocument = co.wrap(function *(documentData, user, locale) { var now = moment(); var creationDateLongString = now.format("YYYYMMDDHHmmss"); var creationDateShortString = now.format("YYYYMMDD"); var output

我的nodejs代码中有一个for循环

const saveDocument = co.wrap(function *(documentData, user, locale) {
    var now = moment();
    var creationDateLongString = now.format("YYYYMMDDHHmmss");
    var creationDateShortString = now.format("YYYYMMDD");

    var outputChildFolder = documentData.code + '_' + creationDateLongString + '_' + documentCounter;
    var outputFolder = config.files.incomingDocumentsDir + '/' + outputChildFolder;

    ++documentCounter;
    yield fs.mkdir(outputFolder)

    var xmlFileName = documentData.code + "-" + creationDateLongString + ".xml";
    var pdfFileName = documentData.code + "-" + creationDateLongString + ".pdf";

    const pages = [];

    for(var index=0;index < documentData.pages.length; ++index) {
        const page = documentData.pages[index];
        var data = new Buffer(page, "base64");
        var dataEncoding = imageType(data).mime === "image/png" ? "png" : "jpg";
        var fileName = "page" + index + "." + dataEncoding;
        var targetFilePath = outputFolder + "/" + fileName
        yield fs.writeFile(targetFilePath,data);
        pages.push(fileName);
    }
...
}
const saveDocument=co.wrap(函数*(文档数据、用户、区域设置){
var now=力矩();
var creationDateLongString=now.format(“YYYYMMDDHHmmss”);
var creationDateShortString=now.format(“yyyyymmdd”);
var outputChildFolder=documentData.code+''.'+CreationDataLongString+'.''.'+documentCounter;
var outputFolder=config.files.incomingDocumentsDir+'/'+outputChildFolder;
++文件计数器;
收益fs.mkdir(outputFolder)
var xmlFileName=documentData.code+“-”+creationDateLongString+“.xml”;
var pdfFileName=documentData.code+“-”+creationDateLongString+“.pdf”;
常量页=[];
对于(变量索引=0;索引
我不明白的是,为什么在上面的代码
页面中
只在第一次迭代时被赋值一次,而在其他迭代中保持相同的值。因此,如果我有5个页面,我会在该变量中使用第一个页面的数据结束5次

我正在运行节点4,没有任何特殊参数或后处理器。只需
npm run…
,它映射到我的
package.json中的
节点src/main/myApp.js

我可能在这里遗漏了一些简单的东西,但我以前在编写客户端ES6代码时从未见过这种情况。当然,最大的区别在于客户端代码通过Babel+Webpack,而服务器端代码直接通过node运行


小补遗:如果你想知道为什么语法是“老派”,而不是像
页面那样。forEach(..
),这是因为我只是在现有代码中做了一些小的修改。

这将在严格模式下按你的期望工作。尝试添加

"use strict";

您将仅在环境(如节点)中看到此行为这实际上尊重并执行了关键字。巴贝尔现在只需将所有
let
const
转换为
var
,以提供
ES5
兼容性。为了演示,看看这个巴贝尔。你可以在输出中看到
const
已更改为
var

我没有得到相同的分辨率ult.请显示更多代码。(另外…
var
->
let
)我也知道var->let之类的东西。因此我在最后一段中说。我不打算重构整个文件。非常感谢!只是想知道,当它在for循环中第二次遇到声明时,为什么不在运行该代码时抛出一个错误?所以我试图找出并意识到它在严格模式下工作。我编辑d我的answeer。我相信这在技术上不是一个重新声明,因为const的作用域与let类似。在某个点上,当您尝试在严格模式之外使用let和const时,节点抛出,但它现在似乎是沉默的,甚至表现得很奇怪,就像在这种情况下,
const
是块作用域的,一旦循环进入新的迭代,它就会抛出重新进入它的作用域,这样你就可以重新声明它。所以,如果我使用严格模式,代码可以工作,但是如果我省略严格模式,它“bug”没有任何警告/错误?奇怪,不是吗?