[英]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.