Javascript 为什么代码段输出为这样?
user和sayHi都在Javascript 为什么代码段输出为这样?,javascript,function,closures,lexical-scope,Javascript,Function,Closures,Lexical Scope,user和sayHi都在if块内定义,但sayHi在块外可用,同时user不可用。为什么?每当您使用var定义变量时,该变量将被提升-这意味着其声明将移动到当前范围的顶部。 但是,对于使用let/const创建的作用域变量而言,情况并非如此,其中变量仅在其创建的作用域中定义块作用域是if、switch条件或for和while循环中的区域。一般来说,每当你看到{花括号},它就是一个块。在ES6中,const和let关键字允许开发人员在块范围内声明变量,这意味着这些变量只存在于相应的块内 const
if
块内定义,但sayHi在块外可用,同时user不可用。为什么?每当您使用var
定义变量时,该变量将被提升-这意味着其声明将移动到当前范围的顶部。
但是,对于使用
let
/const
创建的作用域变量而言,情况并非如此,其中变量仅在其创建的作用域中定义块作用域是if、switch条件或for和while循环中的区域。一般来说,每当你看到{花括号},它就是一个块。在ES6中,const
和let
关键字允许开发人员在块范围内声明变量,这意味着这些变量只存在于相应的块内
const phrase = 'Hello';
if (true) {
const user = 'John';
var sayHi = () => {
console.log(`${phrase}, ${user}`);
};
}
sayHi(); // Hello, John
console.log(user); // ReferenceError: user is not defined
在您的程序中,用户
是作用域常量,只有在if
块中才能访问。
这就是为什么在if
块之外使用时会得到undefined
见此。该变量是在if语句的作用域内使用'const'关键字创建的,简单地说,它是在开头“{”和结尾“}”内创建的,因此只能在括号内访问,因为'const'和'let'具有块作用域 可能的副本和阅读此感谢你们。我得到了它。这是我从你的房间里找到的。我认为作者犯了错误,结果不是错误。它会起作用的。
const phrase = 'Hello';
const user = 'John';
if (true) {
var sayHi = () => {
console.log(`${phrase}, ${user}`);
};
}
sayHi(); // Hello, John
console.log(user); // This will work now, this answer is similar to @Saurabh Agrawal