【发布时间】:2021-11-04 22:14:05
【问题描述】:
这里的变量的行为是什么,即闭包。输出是“未定义”,我不明白。
var x = 21;
var test = function () {
console.log(x); // output: undefined
var x = 20;
};
test();
【问题讨论】:
-
变量声明被提升到函数的顶部,但变量初始化没有被提升:developer.mozilla.org/en-US/docs/Glossary/Hoisting:“只有声明被提升 JavaScript 只提升声明,而不是初始化。如果一个变量是在代码中使用然后声明和初始化,使用时的值将是它的默认初始化(使用var声明的变量未定义,否则未初始化)。"
-
test实际上看起来像这样:function() { var x; console.log(x); x = 20; } -
如果你使用
let(var现在真的只是let和const的遗产)你会得到ReferenceError: can't access lexical declaration 'x' before initialization。
标签: javascript node.js closures