Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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_Let - Fatal编程技术网

Javascript 这里的词汇环境/编译是如何工作的

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”时,下面的函数返回未定义的值

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您能否从词法环境和编译工作原理方面解释一下?