轻松解决5句话的JavaScript范围
javascript程序的每个字节都在这个或那个执行上下文中执行。您可以将这些上下文视为代码的邻居,它们可以向每一行代码指出它们来自哪里,以及谁是朋友和邻居。是的,这是非常重要的信息,因为javascript社会有相当严格的规则,规定谁可以和谁交往。运营背景是一个由大门守护的社区,而不是一扇开着的小门。
我们通常可以把这些社会边界称为范围,并且有足够的重要性在每个邻居的宪章中立法,这就是我们要谈论的语境的范围链。在特定的邻域中,代码只能访问其范围链中的变量。与邻域之外的变量相比,代码更喜欢处理局部变量。
任何编程语言都有范围的概念。简单来说,范围就是变量和函数的可访问范围,也就是说,范围控制着变量和函数的可见性和生命周期。JavaScript的范围一直是前端开发中的难点知识点。记住几个关于JavaScript范围的单词,轻松获得JavaScript范围
1." JavaScript中没有块级作用域"
在Java或者C#中有一个块级的作用域,也就是大括号也是一个作用域。
public static void main(){ if(1==1){ String name=' seven ';} System.out.println(名称);}//错误public static void main(){ if(1==1){ string name=' seven ';}控制台。WriteLine(名称);}//错误:JavaScript语言中没有块级作用域
function Main(){ if(1==1){ var name=' seven ';} console.log(名称);}//输出:七二。JavaScript采用函数范围
在JavaScript中,每个函数都充当一个作用域,内部作用域中的变量不能被外部访问。
function Main(){ var innerValue=' seven ';} Main();console . log(inner value);//错误报告:不清楚引用错误:内部值未定义iii。JavaScript的范围链
因为JavaScript中的每个函数都是一个作用域,如果出现嵌套函数,就会出现作用域链。
xo=' alexFunc(){ var XO=' seven ';函数inner(){ var XO=' Alvin ';console . log(XO);} inner();} Func();
比如上面的代码,有一个由三个作用域组成的作用域链。如果有范围链,那么在寻找变量的时候就会有一个序列。对于上面的例子:
当执行console.log(xo)时,它的搜索顺序是按照范围链从内到外的优先级。如果内层不存在,它会一步一步向上搜索,直到没有抛出异常。
第四,JavaScript的范围链是在执行之前创建的
JavaScript的作用域在执行之前就已经创建好了,以后执行的时候只需要按照作用域链去寻找就可以了。
例1:
xo=' alexFunc(){ var XO=' seven ';function inner(){ console . log(XO);}返回内部;} var ret=Func();ret();//输出结果:七上面的代码,作用域链在调用函数之前就已经存在了:
执行[ret()]时的全局作用域-Func函数作用域-内部函数作用域;】,因为是指内部函数,这个函数的作用域链在执行前已经定义为:全局作用域-Fuc函数作用域-内部函数作用域,所以在执行[ret()]时;】,将根据现有的范围链搜索变量。
例2:
xo=' alexFunc(){ var XO=' eirc ';function inner(){ console . log(XO);} xo=' seven返回内部;} var ret=Func();ret();//输出结果:七上面的代码和例1的目的一样,也是强调在调用函数之前,作用域链已经存在:
全局作用域-Func函数作用域-当内部函数作用域不同时,执行【var ret=Func();】,Func作用域中xo变量的值已从“eric”重置为“seven”,因此执行[ret();】,你只能找到“七”。
例3:
xo=' alexfunction Bar(){ console . log(XO);Func()函数{ var xo=' seven返回栏;} var ret=Func();ret();//输出结果:alex上面的代码在函数执行之前已经创建了两个作用域链:
执行[ret()]时的全局作用域-Bar函数作用域全局作用域-Func函数作用域;】,ret指的是Bar函数,Bar函数的作用域链已经存在:全局作用域-Bar函数作用域,所以执行时会根据已有的作用域链进行搜索。
动词(verb的缩写)预先声明
如果您没有在JavaScript中创建变量并直接使用它,您将报告一个错误:
console . log(xxoo);//错误报告:引用错误不明确:xoois在JavaScript中没有定义,如果创建了一个值而没有赋值,则该值是未定义的,例如:
var xxooconsole . log(xxoo);//输出:函数中未定义,如果这样写:function Foo(){ console . log(XO);var xo=' seven} Foo();//输出:未定义。上面的代码是未定义的输出,而不是报告错误。原因是JavaScript函数在执行之前会声明所有变量而不赋值。所以相当于上面的例子,函数“预编译”时,已经执行了VARXO所以上面代码中的输出是未定义的。
Js是一种非常有趣的语言,因为它的很多特性都是针对HTML中DOM的操作的,所以看起来比较随意,稍微有点不严谨。但是,随着前端的不断繁荣发展和Node的兴起,在jQuery时代,Js不再是一种“玩具语言”或“CSS扩展”。本文中提到的这些很容易被新手和从传统Web开发中过度开发的Js开发人员混淆或误解。希望这篇论文能有所帮助。
版权声明:轻松解决5句话的JavaScript范围是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。