Node.js的REPL语法,父节点为空
Node.js REPL syntax with empty parens
考虑以下令人兴奋的javascript代码:
(function(){console.log("wtf?");})()
function(){console.log("wtf?");}()
将此代码放在文件dumb.js
中并使用node运行,您将得到以下结果:
private/tmp/junk/dumb.js:2
function(){console.log("wtf?");}()
^
SyntaxError: Unexpected token (
at Object.exports.runInThisContext (vm.js:76:16)
at Module._compile (module.js:528:28)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.runMain (module.js:590:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:509:3
不出所料,这是个语法错误。然而,在Node的REPL中,我们看到
$ node
> (function(){console.log("wtf?");})()
wtf?
undefined
> function(){console.log("wtf?");}()
...
在这一点上,除了.break
, ^C
或类似的东西,没有任何东西从延续行中跳出来。
我不明白。
有人能解释一下REPL正在寻找什么,或者解释一下这种行为吗?
每个node.js文档:
当用户在REPL提示符中键入输入时,按Key将把当前的输入行发送给eval函数。为了为了支持多行输入,eval函数可以返回一个实例repl。可恢复到所提供的回调函数:
当你通过节点"filename"执行整个文件时,节点有能力检查语法错误。这是因为文件内容不会改变。
当您在节点repl中的"{"后面出现语法错误时,它假定您正在输入多行语句。大多数多行语句在关闭之前语法都不正确。因此,在关闭语句之前,它不会抛出语法错误。此外,您将无法关闭多行语句,因为node无法在语法错误之后正确解析您的代码。
您所看到的错误语法正是上述文档中所描述的。
问题是您正在定义第二个没有名称的函数。第一个可以,因为它是IIFE函数,但第二个是普通函数,你需要给它命名。这就是为什么终端显示你…因为它在等你完成函数。由于您的错误,Node REPL假定它是一个函数。
相关文章:
- 在自定义截面树中获取父节点
- 如何避免在取消选中子节点时取消选中父节点
- 如果未选中子节点,则未选中父节点
- 仅使用某些子节点访问xml中父节点的子节点
- 如何以编程方式在 jsTree 中选择一个节点并打开所有父节点
- 使用Javascript设置带有子节点的父节点的类's文本等于.
- 如何确定父节点是否有子节点
- Javascript在没有jQuery的情况下获取X父节点
- 如何从wijmo-flex网格的树视图中的节点转到父节点
- 在没有 jquery 的情况下更改子节点(父节点具有 ID)中的链接文本
- JQuery 选择父节点并更改其类名
- 如何删除javascript中的节点,而不需要父节点为null
- 如果未全部选中子节点,则取消选中父节点
- 如何在JavaScript中删除子节点触发点击事件时的父节点
- 获取下一个不工作Javascript DOM的同级父节点的子节点
- 取消绑定父节点和子节点
- jstree jquery插件-获取父节点的所有子节点和子节点
- 使用jquery检索父节点的子节点
- 如何在所有父节点上获取文件夹图标,在所有子节点上获取文件夹加图标(左侧的图标)
- Node.js的REPL语法,父节点为空