什么时候变量成为JavaScript函数环境的一部分?

时间:2016-09-01 21:44:12

标签: javascript callback closures webstorm

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有某种预处理器,它只包含函数中使用的变量,在它的闭包中?

1 个答案:

答案 0 :(得分:3)

Javascript编译器检查函数,并确定它引用的自由变量,并且只将那些变量放入闭包环境中。如果您在函数中没有console.log(x),则无需将x放入环境中。

有关相关问题,请参阅

Definition of 'closures'

相关问题