欢迎来到天天文库
浏览记录
ID:30775958
大小:50.05 KB
页数:4页
时间:2019-01-03
《javascript作用域示例详解_javascript技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、JavaScript作用域示例详解作用域是JavaScript最重要的概念Z_,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域示例详解的介绍,希望能帮助大家更好的学习JavaScript。任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript屮,变量的作用域有全局作用域和局部作用域两种。一、JavaScript中无块级作用域在Java或C#中存在块级作用域,即:大括号也是一个作用域。publicstaticvoidm
2、ain(){if仃二二1){Stringname二〃seven〃;}System・out・println(name);}//报错publicstaticvoidMain(){if(l==l){・〃〃stringname=seven;}Console.WriteLine(name);}//报错在JavaScript语言中无块级作用域functionMain(){if(1=1){varname='seven';}console・log(name);}//输出:seven二、JavaScript釆用函数作用域在JavaScript屮每个函数作为一个作用域,在外部无法访问内部作用威屮的变量。
3、fundionMain(){varinnerValue='seven';}MainO;console.log(innerValue);//扌艮错:UncaughtReferenceError:innerValueisnotdefined三、JavaScript的作用域链由于JavaScript中的每个函数作为一个作用域,如果出现函数欧套函数,则就会岀现作用威链。xo二'alex,;functionFunc(){varxo="seven";functioninner(){varxo二'alvin,;console・1og(xo);}inner();}Func();如上述代码则出现三个作
4、用域组成的作用域链,如果出现作用域链后,那么寻找变量时候就会出现顺序,对于上述实例:当执行console,log(xo)时,其寻找顺序为根据作用域链从内到外的优先级寻找,如果内层没冇就逐步向上找,直到没找到抛出异常。四、JavaScript的作用域链执行前已创建JavaScript的作用域在被执行之前已经创建,日后再去执行吋只需要按照作用域链去寻找即可。示例一:xo二'alex,;functionFunc(){varxo=sevenfunctioninner(){console,log(xo);returninner;}varret=Func();ret();//输出结果:seven
5、上述代码,在函数被调用之前作用域链已经存在:•全局作用域->Func函数作用域->inner函数作用域当执行【mt();】时,由于其代指的是inner函数,此函数的作用域链在执行Z前已经被定义为:全局作用域->Func函数作用域->inner函数作用域,所以,在执行【ret();】时,会根据已经存在的作用域链去寻找变量。示例二:xo='alcx';functionFunc(){〃・〃varxo=eirc;functioninner(){console,log(xo);}xo='seven';returninner;}varret二Func();ret();//输出结果:seven上述
6、代码和示例一的目的相同,也是强调在函数被调用之前作用域链已经存在:•全局作用域-〉Func函数作用域-〉inner函数作用域不同的时,在执行【varret二FuncO;]时,Func作用域中的xo变量的值已经由“sic”被重置为“seven”,所以Z后再执行【ret0;】时,就只能找到“seven”。不例三:xo='alex';functionBar(){console,log(xo);}functionFunc(){〃〃varxo二seven;returnBar;}varret=Func();ret();//输出结果:alex上述代码,在函数被执行Z前已经创建了两条作用域链
7、:•全局作用域-〉Bar函数作用域•全局作用域->Func函数作用域当执行【ret();】时,rel代指的Bar函数,而Bar函数的作用域链已经存在:全局作用域->Bar函数作用域,所以,执行时会根据已经存在的作用域链去寻找。五、声明提前在JavaScript中如果不创建变量,直接去使用,则报错:console,log(xxoo);//扌良错:UncaughtReferenccError:xxooisnotdefinedJavaScript中如果创建值而不
此文档下载收益归作者所有