以下对于全局变量与局部变量的初级理解,主要是来自《JavaScript DOM编程艺术(第2版)》里的内容理解出来的,万分感谢这本好书,希望有兴趣的朋友也去买下这本好书吧,不会后悔的。
最初接触JavaScript的时候觉得界定全局变量与局部变量的界限,就是函数后面的花括号'{}'。通过学习,现在了解到,'var'这个关键字也会对函数内外的变量产生深远地影响。如果你能清楚的认识到什么时候要用var,什么时候不用,那在参考别人代码的同时也就不会只是单纯的认为这儿缺少一个var只是因为这个人在编写代码的时候在偷懒了。
当函数内外的变量名出现重名的时候(虽然很少会遇到这种情况,平时我也极力地注意变量名的使用,但是不排除脑袋糊的时候会有差错),var这个关键字用得好会帮助你,用得不好会是你的绊脚石。
正式开始,其实正文很短的,哈哈:
当在一个脚本里var声明一个变量x,那这个x肯定是一个全局变量,如果一个函数内部也出现一个x变量,那他影不影响这个全局变量x就得看局部变量x的前面有没有var这个关键字了。
如果在函数内部是 var x = 1;那么这个x在这个函数内部就是个安分的局部变量,一出函数,不会对全局变量x的赋值有任何影响。
如果在函数内部是 x = 1;那么函数的花括号是不能阻挡这个激进分子x的,之前的全局变量x所赋值将会被改变成为1,当然还是得看先后顺序,在后面的会覆盖前面的值。
通过比较不难发现,要是不想故意的让局部变量去影响一个同名全局变量,那就还是老老实实地在每个新变量名字前加个var吧。
也许在小篇幅的代码中很难出现重名的变量,但是你要想想,你以后可是每天千来行代码的大师啊,别等写到最后发现总是不对那就头大了。
以上文字及以下代码都是本人学习得来的领悟,有不足之处请提意见,望海涵,谢谢。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>
<body>
<script>
//示例一
var a_1 = 400; //全局变量
function myFun1(num){
a_1 = num+num; //由于没有var声明,函数内的a_1也被视为一个全局变量
return a_1;
}
var av = myFun1(10);
alert("示例一的结果:"+a_1); //因为函数中a_1赋值的被视为全局变量,所以a_1被影响的值为20
//示例二
var a_2 = 400; //全局变量
function myFun2(num){
var a_2 = num+num; //由于有var声明,函数内的a_2被视为一个局部变量
return a_2;
}
var av = myFun2(10);
alert("示例二的结果:"+a_2); //因为函数中a_2赋值的被视为局部变量,所以a_2没有被影响的值为400
</script>
</body>
</html>
热门评论
注视那儿的确打错了,谢谢提醒
最下面的例子是想说a2吧,打错了?