作用域决定了代码中变量、函数和对象的可见性。在此处获取所有详细信息。作用域是JavaScript和编程的一个重要方面。范围限制了整个代码中变量、函数和对象的可见性和可用性。这带来了许多好处,其中包括:安全性——变量只能在需要的地方访问。减少变量名称空间冲突-当两个或多个变量共享一个公共名称时,就会发生变量名称冲突。可变范围有助于减少这种情况的发生。*在最基本的层面上,JavaScript有两种作用域:GlobalScope(全局作用域)LocalScope(本地作用域)全局作用域当你开始用JavaScript编写代码时,你就已经处于全局作用域中了。任何在全局范围内编写的内容都可以在JavaScript代码的任何地方访问varcat='Jerry';functionlocalScopeExample(){//LOCALSCOPEconsole.log(cat);//Jerry}//全球范围控制台。日志(猫);//Jerry本地作用域本地作用域稍微复杂一些。局部作用域变量仅在局部作用域(定义它们的地方)内可见和可访问。您可以将本地范围视为您在全局范围内创建的任何新范围。一个简单的例子是使用函数。每个用JavaScript编写的函数都会创建一个新的本地作用域。这些局部作用域的变量只能在定义它们的函数内访问。让我们看一个例子。我们将创建一个函数并在该函数中声明变量cat。功能中的任何地方都可以访问和使用猫。但是,在函数外部调用cat将导致未捕获的ReferenceError:functionlocalScopeExample(){//LOCALSCOPEvarcat='Jerry';控制台日志(猫);//杰里}//全球范围console.log(cat);//UncaughtReferenceError:catisnotdefined由于局部变量只能在其函数内访问,所以可以在_不同的函数_中使用相同的变量名:functionfunc1(){varcat='Jerry';控制台日志(猫);//Jerry}functionfunc2(){varcat='Tom';控制台日志(猫);//Tom}词法作用域学习词法作用域也很重要。词法作用域(也称为静态作用域)是内部函数访问外部函数作用域的能力。让我们看一个例子。在下面的代码中,我们定义了两个函数——全局作用域中的func1和func1作用域中声明的func2。由于词法作用域限制,您可以在_globalscope_和_scope2_中访问_scope1_中的所有内容://GLOBALSCOPEvardog='Lewis';functionfunc1(){//范围1varcat='Jerry';varfunc2=function(){//范围2console.log(cat);//杰里console.log(dog);//Lewis}}在块作用域中使用var时,变量可以是全局作用域,也可以是定义它的函数的局部变量。块级作用域,例如if、for、while、{}对var没有影响。另一方面,let&const绑定在它们定义的块中。让我们看一个例子:letx=1;{让x=2;控制台日志(x);//2}console.log(x);//1正如您在上面看到的,只需使用括号创建一个代码块,该代码块将把在该块中声明的任何变量引入局部范围。相同的概念适用于其他块作用域:letx=1;if(x!==2){letx=2;控制台日志(x);//2}console.log(x);//1但要小心。如果你不小心用相同的块范围重新声明相同的变量,你会得到一个错误:{letx=1;letx=2;}UncaughtSyntaxError:Identifier'x'hasalreadybeendeclared关键要点:全局作用域的持续时间与系统一样长。局部变量在函数启动时创建,在函数结束时删除。词法作用域允许内部函数访问其外部函数的范围。const和let是块作用域变量。块作用域不适用于var。
