下面小编就为大家带来一篇浅谈 JavaScript 的全局变量与局部变量。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
一、JavaScript scope 的划分标准是 function 函数块,不是以 if、while、for 来划分的
- <script>
- function f1() {
- alert("before for scope:" + i);
- //i未赋值(并不是没有声明!使用未声明变量或函数会导致致命错误从而中断脚本执行)
- //此时i值为undefined
- for(
- var i = 0;
- i < 3;
- i++) {
- alert("in for scope:" + i);
- }
- //i的值是0,1,2
- alert("after
- for scope:" + 1);
- //i的值是3,此时已经在for scope之外,但i的值仍然保留为3
- while(true) {
- var j = 1;
- break;
- }
- alert(j);
- //j的值是1,此时已经在while scope之外,但j的值仍然保留为1
- if(true) {
- var k = 1;
- }
- alert(k);
- //k的值为1,此时已经在if scope之外,但k的值仍保留为1
- }
- f1();
- //此时在函数块外调用函数,再次输出存在于f1这个function scope里的i j k变量
- alert(i);
- //error!!!原因是这里的i未声明(不是未赋值,区别f1的第一行输出),脚本错误,程序结束!
- alert(j);
- //未执行
- alert(k);
- //未执行
- </script>
二、JavaScript 在执行之前会对整个脚本文件进行预编译(对脚本文件的声明部分做分析,包括局部变量部分),从而确定实变量的作用域。举个例子在下边:
- <script>
- var x=1;
- function f2(){
- alert(x);
- //x的值为undefined!这个x并不是全局变量,因为在function scope已经又声明了一个重名的局部变量,所以全局变量的参数a被覆盖了。
- 说明了JavaScript在执行前会进行预编译,函数体内的x就被指向局部变量,而不是全局变量。此时x只有声明,没有赋值,所以为undefined
- x=3;
- alert(x);
- //x值为3.但还是局部变量
- var x;
- //局部变量x在这里声明
- alert(x);
- //值为3
- }
- f2();
- alert(x);
- //x值为1,并不是在function scope内,x的值为全局变量的值。
- </script>
三、当全局变量跟局部变量重名时,局部变量的 scope 会覆盖掉全局变量的 scope,当离开局部变量的 scope 后,又重回到全局变量的 scope,而当全局变量遇上局部变量时,
怎样使用全局变量呢?用 window.globalVariableName。
- <script>
- var a=1;
- function f3(){
- alert(window.a);
- //a位1,这里的a是全局变量
- var a=2;
- alert(a);
- }
- f3();
- alert(a);
- </script>
以上这篇浅谈 JavaScript 的全局变量与局部变量就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持 phperz。
来源: http://www.phperz.com/article/17/0302/264990.html