Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.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

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

Javascript 这就是范围的全部吗?

Javascript 这就是范围的全部吗?,javascript,Javascript,试图缩小范围。这就是我目前所拥有的。有什么要补充的吗 标识符关键字:var let const和“隐式变量”,例如x=1 块:{} 函数范围:无论标识符关键字是什么,函数的参数或块中声明的任何变量都不能在外部访问 块作用域:对于不是函数块的任何块,让和constprotect标识符与函数一起被访问。这包括循环的参数,例如 对于let i=0;i隐式全局变量。使用严格模式,以便将未声明的标识符分配给该标识符始终是错误的。在我的旧博客上的这篇旧文章中有更多内容: 函数范围:无论标识符关键字是什么,函

试图缩小范围。这就是我目前所拥有的。有什么要补充的吗

标识符关键字:var let const和“隐式变量”,例如x=1

块:{}

函数范围:无论标识符关键字是什么,函数的参数或块中声明的任何变量都不能在外部访问

块作用域:对于不是函数块的任何块,让和constprotect标识符与函数一起被访问。这包括循环的参数,例如

对于let i=0;i<5;i++{ 返回5; } console.logi//导致ReferenceError。 函数和块作用域都可以直接“向上”访问它的任何内容,例如fcan返回w而不是x

v=1; f=函数{ w=1; f2=功能{ console.logw; console.logx; } f2; } f3=功能{ x=1; } F 当函数或块作用域引用同名变量时,最接近作用域的变量(一直到作用域自己的变量)具有首选项


另外,当两个变量都是const或let时,不能在同一范围内有相同的命名变量。

您有很多基础知识,是的。一些注释/补充:

标识符关键字:var let const和“隐式变量”,例如x=1

类和函数声明还将在其显示为类名/函数名的范围内创建标识符绑定 命名类和函数表达式不会在它们出现的作用域中创建标识符绑定,但会在类或函数中为类名/函数名创建一个标识符绑定 隐式变量=>隐式全局变量。使用严格模式,以便将未声明的标识符分配给该标识符始终是错误的。在我的旧博客上的这篇旧文章中有更多内容: 函数范围:无论标识符关键字是什么,函数的参数或块中声明的任何变量都不能在外部访问

块作用域:对于不是函数块的任何块,让和constprotect标识符与函数一起被访问。这包括循环的参数,例如

对于let i=0;i<5;i++{ 返回5; } console.logi//导致ReferenceError。 它们防止进入区块外而非功能区;我想那只是你问题中的一个输入错误。变量不存在于块外部,因此无法在块外部访问它们

类声明的工作方式与let和const相同。也就是说,let、const和class具有块作用域。var具有函数作用域。对于函数声明…它很复杂;最好避免在非函数块中声明函数。改用函数表达式

函数和块作用域都可以直接访问它上面的任何内容

不只是直接,任何封闭范围内的任何内容:

常数globalScope=1; 函数foo{ const functionScope=2; { 常数块范围=3; 控制台。全球视野; console.logfunctionScope; console.logblockScope; } }
傅;差不多,除了你应该在第二个片段中使用var、let或const…接近投票人-当我读到标题时,我希望投票的范围也太广了。:-但是当我读到这个问题的时候,我想实际上,这已经足够具体了,我可以回答它了。显然,意见可能会有所不同。我同意@T.J.Crowder的观点,这是绝对有责任的。乍一看,我认为没有什么可以回答的,因为这个问题似乎涵盖了大部分内容。经过仔细检查,T.J.的答案中有一些相对较小的空白需要填补。FWIW,我在我的新书《JavaScript:新玩具》中介绍了上述内容,其中介绍了ES2015-ES2020中JavaScript的新增内容,并解释了范围和绑定。如果您感兴趣,请查看我的个人资料以了解详细信息。