变量何时成为 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
放入环境中。
有关相关问题,请参阅
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
放入环境中。
有关相关问题,请参阅