Javascript 这里的词汇环境/编译是如何工作的
当我使用“var”时,下面的函数返回未定义的值Javascript 这里的词汇环境/编译是如何工作的,javascript,let,Javascript,Let,当我使用“var”时,下面的函数返回未定义的值 var x=3; 函数func(随机化){ 如果(随机){ var x=Math.random(); 返回x; } 返回x; } console.log(func(false));//未定义的let是一个块范围,这意味着如果在全局范围中声明let x=3,则将通过全局范围下的范围定义所有。这就是为什么当您调用func(false)时,由于x在全局范围内,它仍然被定义为3 var是执行上下文范围。因此,当您运行函数时,func(false),它在函
var x=3;
函数func(随机化){
如果(随机){
var x=Math.random();
返回x;
}
返回x;
}
console.log(func(false));//未定义的
let
是一个块范围,这意味着如果在全局范围中声明let x=3
,则将通过全局范围下的范围定义所有。这就是为什么当您调用func(false)
时,由于x在全局范围内,它仍然被定义为3
var
是执行上下文范围。因此,当您运行函数时,func(false)
,它在函数运行时没有x的上下文,因为x没有在函数中定义。检查活动片段-它们似乎产生相同的输出两个函数执行相同的操作,它们是否关闭var
-或let
-声明的变量并不重要。@CertainPerformance请检查结果。它们是不同的。复制品let
具有块作用域,而var
具有函数作用域。当使用var
时,您的第二个返回x
是指在函数内部创建的var
(因为函数作用域),但使用let
,则是指外部的x
(因为块作用域)@CertainPerformance您能否从词法环境和编译工作原理方面解释一下?