变量何时成为 JavaScript 函数环境的一部分?

When do variables become part of a JavaScript function's environment?

var x = "hi!";
request(url, function(error, response, body) {
    console.log(x);    //prints "hi!"        
});

如果我删除行 console.log(x) 并将其替换为 console.log('hello!') 并在 WebStorm 中的该行上放置一个断点,并且如果我尝试评估 x,它会显示 "ReferenceError: x is not defined".

这是为什么?这只是 WebStorm 的工作方式还是 JavaScript 有某种只包含函数中使用的变量的预处理器,在它的闭包中?

Javascript 编译器检查函数,并确定它引用了哪些自由变量,并且只有那些变量被放入闭包环境中。如果函数中没有console.log(x),那么就不需要将x放入环境中。

有关相关问题,请参阅