Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么函数内部的这个变量可以读取函数语句下的全局变量?_Javascript_Node.js - Fatal编程技术网

Javascript 为什么函数内部的这个变量可以读取函数语句下的全局变量?

Javascript 为什么函数内部的这个变量可以读取函数语句下的全局变量?,javascript,node.js,Javascript,Node.js,为什么函数内部的这个变量可以读取甚至在函数语句下声明和赋值的全局变量 JavaScript在这种情况下是如何工作的? 我想了解它是如何工作的 function fn() { console.log(foo); } const foo = 3; run(); 我知道这是因为功能提升。但是第一个代码是另一个故事,对吗?JavaScript被解释。只有在调用函数时才会对其求值。如果在变量声明之前将函数调用移动到,它将不起作用。请参阅下面的代码,它给出了一个错误 功能fn{ consol

为什么函数内部的这个变量可以读取甚至在函数语句下声明和赋值的全局变量

JavaScript在这种情况下是如何工作的? 我想了解它是如何工作的

function fn() {
    console.log(foo);
}

const foo = 3;

run();

我知道这是因为功能提升。但是第一个代码是另一个故事,对吗?

JavaScript被解释。只有在调用函数时才会对其求值。如果在变量声明之前将函数调用移动到,它将不起作用。请参阅下面的代码,它给出了一个错误

功能fn{ console.logfoo; } fn;
常数foo=3;第一个代码就是foo是在fn实际运行之前设置的。是的,第二个是由于提升。@Rhumborl所以,在JavaScript中,语句是在表达式之后运行的?@shu在JavaScript中,声明会影响它们出现的整个范围,变量范围不会从声明开始。这是提升吗?还是别的什么?这种行为有没有术语?它与作用域链有关吗?这与编译与解释以及中的灰色区域无关between@Bergi这和吊装和范围链有关吗?@shu,是的。作用域链,虽然不是真的,但这个例子确实使用了词法作用域从外部作用域访问foo。
fn();

function fn() {
    console.log("hello");
}