在c/java中,拥有块级作用域的概念,大括号内就是一个块级作用域,在块级作用域内声明的变量,块以外不可见。
C语音的块级作用域示例如下:
int one = 1,two = 2;if(one < two){
int temp = 0;
temp = one;
one = two;
two = temp;
}
printf(‘big=%d,small=%d‘,one,two); //big=2,small=1
printf(‘temp=%d‘,temp); //出错
Javascript代码如下:
1 var one = 1,two = 2;
2
3 if(one < two){
4
5 var temp = 0;
6
7 temp = one;
8
9 one = two;
10
11 two = temp;
12
13 }
14
15 console.info("big="+one+",small="+two); //big=2,small=1
16
17 console.info(temp); //1
我们发现在大括号里面声明的变量竟然在大括号以外依然能访问!!!这就是javascript变量神奇的地方之一 ——因为javascript没有块级作用域!!!
这样就会出现一个问题,如果多人编辑一段程序时,每个人都根据自己的习惯,将临时变量命名为var temp,变量调用以后未释放内存,会不会污染其他人编写的程序呢?有可能。那如何杜绝呢?我们知道,在一个函数内部声明的变量是局部变量,外部无法访问,那我们是不是可以声明一个匿名函数,将逻辑过程封装起来,只返回结果呢?可以。
我们对以上的javascript程序做如下修改:
1 var one = 1,two = 2;
2
3 (function(a,b){
4
5 var temp = 0;
6
7 if(a < b){
8
9 var temp = 0;
10
11 temp = a;
12
13 a = two;
14
15 b = temp;
16
17 }
18
19 console.info("big="+a+",small="+b);
20
21 })(one,two); //big=2,small=1
22
23 console.info(temp); //ReferenceError: temp is not defined
函数执行的结果达到了我们的要求,而且声明的中间变量成为了局部变量,这样局部变量就不会污染其他程序了。
时间: 2024-08-09 02:19:01