博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js基础 局部变量和全局变量 作用域链 形参是局部变量
阅读量:7024 次
发布时间:2019-06-28

本文共 1548 字,大约阅读时间需要 5 分钟。

hot3.png

js基础 局部变量和全局变量 作用域链 形参是局部变量

 局部变量和全局变量

局部变量:在一个作用域(定义域)内定义的变量就是这个作用域内的局部变量。只能在作用域内被访问到。

全局变量:从广义上来看,全局变量也是一种局部变量。全局变量定义在全局,所以也叫全局变量。可以在任何地方都被访问到。
 

1 // b是在全局内部定义的变量,是全局变量,可以在任何地方访问到
2 var b = 2;
3 function fun(){
4 // 在函数内部定义的变量是局部变量,只能在该作用域内访问到
5 var a = 1;
6 console.log(a);
7 }
8 fun();
9 console.log(b);
10 console.log(a);

800?pt=0&ek=1&kp=1&sce=0-12-12

变量申明的原理:全局变量,在全局定义之后,会永久存在,任何时候,任何位置访问,都能够找到它。局部变量定义在函数内部的,函数定义的过程,并没有真正的去定义这个局部变量,只有在执行函数的时候,才会立即定义这个局部变量,执行完之后,变量就被立即销毁了,在其他的地方访问变量的时候,找不到这个变量,所以会有一个引用错误,变量未定义。

1.4 作用域链

指的是我们变量查找的一个规律:我们可以在不同的作用域内使用相同的标识符去命名变量。我们在使用一个变量的时候,需要找到匹配的标识符,我们有重复的,用哪一个?如果在当前作用域有这个变量,就直接使用,如果当前作用域没有这个变量定义,会一层一层的从本层往外依次查找,遇到第一个就直接使用。类似于就近原则。

当遇见一个变量时,JS引擎会从其所在的作用域依次向外层查找,查找会在找到第一个匹配的标识符的时候停止。在多层嵌套的作用域中可以定义同名的标识符,发生“遮蔽效应”。
 

1 // 全局变量
2 var a = 1;
3 function fun1(){
4 var a = 2;
5 function fun2(){
6 var a = 3;
7 console.log(a);    //因为本层有定义直接输出3
8 function fun3(){
9 console.log(a);  //本身没有a定义,会从本层出发依次向外查找,当找到定义时,直接执行。3
10 }
11 fun3();
12 }
13 fun2();
14 }
15 fun1();
16 console.log(a);   //1

800?pt=0&ek=1&kp=1&sce=0-12-12

如果变量声明时,不写var关键字,计算机会自动在全局作用域内给它进行一个声明,局部变量就强制性的变成了全局变量。这种情况是不合理,会造成一个全局变量的污染。所以,定义变量必须写var关键字。
 

1 var a = 1;
2 // 相当于
3 // var a = 3;
4 function fun1(){
5 a = 2;
6 function fun2(){
7 a = 3;
8 console.log(a);    //因为本层有定义直接输出3
9 function fun3(){
10 console.log(a);  //本身没有a定义,会从本层出发依次向外查找,当找到定义时,直接执行。3
11 }
12 fun3();
13 }
14 fun2();
15 }
16 fun1();
17 console.log(a);

800?pt=0&ek=1&kp=1&sce=0-12-12

1.5 形参是局部变量

形参是局部变量,形参的作用域是它定义的函数的内部。

 

1 function fun(a){
2 // 形参是局部变量
3 console.log(a);
4 }
5 fun(1);
6 console.log(a);
WEB前端互动交流群 434623999

转载于:https://my.oschina.net/u/3709170/blog/1591326

你可能感兴趣的文章
通过IEnumerable和IDisposable实现可暂停和取消的任务队列
查看>>
安卓开发_浅谈ContextMenu(上下文菜单)
查看>>
理解class.forName()
查看>>
ios 多线程 面试
查看>>
[Papers]NSE, $u_3$, Lebesgue space [Cao-Titi, IUMJ, 2008]
查看>>
顺序队列实现任务以此执行-任务调度系列2
查看>>
PHP JSON 数据解析代码
查看>>
Android 启动APP黑屏解决方案
查看>>
windows 2003 远程登录时如何修改管理员密码
查看>>
sql server 2008 评估期已过期解决办法
查看>>
2015第8周三马年除夕
查看>>
UI的重用性
查看>>
What is Split Brain in Oracle Clusterware and Real Application Cluster (文档 ID 1425586.1)
查看>>
php SimpleXML
查看>>
CLR C++ Set Word CustomDocumentProperties
查看>>
会员数据挖掘
查看>>
13、java中8中基本类型
查看>>
纯css3制作写轮眼开眼及进化过程
查看>>
CSS布局框架 960GS 表单排版示例
查看>>
OSX终端 命令行的一些基本操作
查看>>