var x = "hi!";
request(url, function(error, response, body) {
console.log(x); //prints "hi!"
});
如果我删除行console.log(x)
并将其替换为console.log('hello!')
并在WebStorm中的该行上放置断点,并且如果我尝试评估x
,则会显示“ReferenceError: x未定义“。
为什么?它只是WebStorm的工作方式,还是JavaScript有某种预处理器,它只包含函数中使用的变量,在它的闭包中?
答案 0 :(得分:3)
Javascript编译器检查函数,并确定它引用的自由变量,并且只将那些变量放入闭包环境中。如果您在函数中没有console.log(x)
,则无需将x
放入环境中。
有关相关问题,请参阅