(教程)脚本无法运行,因为SyntaxError:块范围的声明

时间:2016-02-14 00:38:22

标签: javascript node.js

根据Quill的建议,我再次发布此消息。我第一次发布" npm更新节点"解决了这个问题。

我从Packtpub.com购买了一个名为"使用NodeJs和MongoDB进行Web开发的教程"我想运行示例教程代码。这是一个例子:

#!/usr/bin/env node
console.log('Argument vector');
console.log(process.argv);

let args = process.argv.slice(2);

console.log('\nArguments after slicing');
console.log(args);    
let name = args[0];    
if (!name) {
    throw Error('\nYou have not given your name, bye');
}

console.log('\nHello ' + name);

所以我下载并安装了Node-v5.6.0-x64.msi。使用let命令时为什么会出错:

-*- mode: compilation; default-directory: "c:/Users/v-sihein/Documents/books/2016/javascript/Web Development with Node.JS and MongoDB/3413OS_Section 01_Code/1/1.3/" -*-
Compilation started at Sat Feb 13 16:25:01

node 03-hello-arguments.js siegfried
c:\Users\v-sihein\Documents\books\2016\javascript\Web Development with Node.JS and MongoDB\3413OS_Section 01_Code\1\1.3\03-hello-arguments.js:9
let args = process.argv.slice(2);
^^^

SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:387:25)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:140:18)
    at node.js:1001:3

Compilation exited abnormally with code 1 at Sat Feb 13 16:25:01

现在,如果我将" let" s更改为" var" s然后它就可以了!

我之前(几天前)和" npm更新节点"解决了这个问题(我想 - 也许我错误地用" var"而不是" let")运行版本。但是,我已经重新安装了Windows 10,现在" npm更新节点"不再解决问题了。

那么我希望能够使用node v5.6.0执行哪些版本的javascript和ecmascript?我一直在搜索,我找不到一个简单的javascript功能表,用于不同版本的节点和javascript。我认为知道版本节点支持哪些版本的javascript / ecmascript对每个节点程序员来说都是非常基本/重要的信息!有人能指点我这样的桌子吗?

我买了一个糟糕的教程吗?我认为作者使用linux或MAC,我使用的是Windows。节点不应该在mac / linux和windows上以相同的方式工作吗?

请告诉我此程序是否适用于您的计算机。请务必提及您是否正在运行mac,unix,linux或windows(或其他什么?)。

由于 齐格弗里德

1 个答案:

答案 0 :(得分:1)

您应该将'use strict'添加到js部分的开头

#!/usr/bin/env node
'use strict'
(...)

这将立即起作用。这个教程没有提到这一点,这很奇怪。