繁体   English   中英

在chrome devtools中检查node.js时函数语句的奇怪行为

[英]function statement's strange behavior when inspecting node.js in chrome devtools

我使用chrome devtools调试node.js脚本( node --inspect script.js ,如https://nodejs.org/en/docs/guides/debugging-getting-started/中所述

由于某种原因,功能语句无法正常工作。 这是代码:

function f(){};
f=1;
console.log(f);

http = require('http');
myserver=http.createServer(function (req, res) {
    res.end();
}).listen(8080);

控制台输出1 ,但是当我尝试在控制台中输入f时,它显示“ Uncaught ReferenceError:f未定义”。

如果我使用函数表达式代替函数语句,则一切正常:

f=function(){};
f=1;
console.log(f);

http = require('http');
myserver=http.createServer(function (req, res) {
    res.end();
}).listen(8080);

因此,我想知道问题的根源是什么以及如何解决它。

PS:脚本的createServer部分是我使用的一个技巧,因此在脚本执行后chrome devtools控制台仍在运行。 顺便说一句,还有其他更直接的方法吗?

更新:我偶然发现了另一种方法,该方法在函数语句中没有此问题: node --inspect -e "$(< script.js)"

第一个脚本声明的是模块范围内的局部变量,该局部变量先用函数初始化,然后分配给1 ,然后进行垃圾回收-服务器关闭未使用它,请参阅Chrome调试器为何认为闭合的局部变量未定义?

第二个脚本未声明任何变量1 ,而是将其分配给全局变量2 首先是函数,然后是值1 ,但是全局变量无法被垃圾回收,因为稍后运行的任何代码仍可以访问它们。

[1]:使用var f可能会导致与第一个脚本相同的结果。
[2]:始终"use strict"模式 您将获得适当的例外。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM