首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环内部的const用法,为什么是这种行为?

循环内部的const用法,为什么是这种行为?
EN

Stack Overflow用户
提问于 2016-04-08 15:17:30
回答 1查看 2.2K关注 0票数 4

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

代码语言:javascript
运行
复制
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);
    }
...
}

我不明白的是,为什么在上面的代码中,page只在第一次迭代中分配一次,并且在其他迭代过程中保持相同的值。因此,如果我有5页,我会用变量中第一页的数据结束5次。

我运行的节点4没有任何特殊的参数或后处理器。简单地说,npm run ...映射到我的package.json中的一个node src/main/myApp.js

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

小增编:如果您想知道为什么语法的“老派”而不是类似于pages.forEach(....的东西,那是因为这是现有的代码,我只是做了一些小的修改。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-08 15:53:53

这将像你期望的那样在严格模式下工作。试着增加..。

代码语言:javascript
运行
复制
"use strict";

您只会在实际尊重和执行关键字的环境(如Node)中看到这种行为。Babel现在只是将所有letconst转换为var,以提供ES5兼容性。为了演示,请看一下这个Babel 示例。您可以在输出中看到const已更改为var

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36503318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档