[首页]
[文章]
[教程]
首页
Web开发
Windows开发
编程语言
数据库技术
移动平台
系统服务
微信
设计
布布扣
其他
数据分析
首页
>
编程语言
> 详细
JavaSCript全局变量与局部变量
时间:
2017-08-01 22:49:45
阅读:
229
评论:
0
收藏:
0
[点我收藏+]
今天公司一个实习小妹子问我两段
js
代码的区别:
[javascript]
view plain
copy
<script type=
"text/javascript">
var a =
"Hello";
function test(){
var a;
alert(a);
a =
"World";
alert(a);
}
</script>
[javascript]
view plain
copy
<script type=
"text/javascript">
var a =
"Hello";
function test(){
alert(a);
a =
"World";
alert(a);
}
</script>
我想,好简单呀,不就是全局变量跟局部变量的scope问题吗?我说:"当全局变量跟局部变量重名时,局部变量的scope会覆盖掉全局变量的scope,当离开局部变量的scope后,又重回到全局变量的scope。所以两段代码运行的结果分别为:1) undefined World 2) Hello World。然后我随意编了如下一个例子给她:
[javascript]
view plain
copy
<script>
var a =1;
function test(){
alert(a);
var a = 2;
alert(a);
}
test();
alert(a);
</script>
大家猜结果等于多少?是输出1 2 1 吗?嗯嗯,当我把测试case发给她之前也是这么认为的,但测试输出后……运行结果是 undefined 2 1。当时百思不得其解,问了谷老师才知道,我对JS还不是非常了解,所以痛下苦功,学习+测试,总结如下:
一、Javascript的变量的scope是根据方法块来划分的(也就是说以function的一对大括号{ }来划分)。切记,是function块,而for、while、if块并不是作用域的划分标准,可以看看以下几个例子:
[javascript]
view plain
copy
<script>
function test2(){
alert (
"before for scope:"+i);
// i未赋值(并不是未声明!使用未声明的变量或函数全抛出致命错误而中断脚本执行)
// 此时i的值是underfined
for(
var i=0;i<3;i++){
alert(
"in for scope:"+i);
// i的值是 0、1、2, 当i为3时跳出循环
}
alert(
"after for scope:"+i);
// 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
}
test2();
//若在此时(function scope之外)再输出只存在于test2 这个function scope里的 i、j、k变量会发生神马效果呢?
alert(i);
//error! 没错,是error,原因是变量i未声明(并不是未赋值,区分test2函数的第一行输出),导致脚本错误,程序到此结束!
alert(
"这行打印还会输出吗?");
//未执行
alert(j);
//未执行
alert(k);
//未执行
</script>
二、Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定实变量的作用域。怎么理解呢?看下面一个例子:
[javascript]
view plain
copy
<script>
var a =1;
function test(){
alert(a);
//a为undefined! 这个a并不是全局变量,这是因为在function scope里已经声明了(函数体倒数第4行)一个重名的局部变量,
//所以全局变量a被覆盖了,这说明了Javascript在执行前会对整个脚本文件的定义部分做完整分析,所以在函数test()执行前,
//函数体中的变量a就被指向内部的局部变量.而不是指向外部的全局变量. 但这时a只有声明,还没赋值,所以输出undefined。
a=4
alert(a);
//a为4,没悬念了吧? 这里的a还是局部变量哦!
var a;
//局部变量a在这行声明
alert(a);
//a还是为4,这是因为之前已把4赋给a了
}
test();
alert(a);
//a为1,这里并不在function scope内,a的值为全局变量的值
</script>
三,当全局变量跟局部变量重名时,局部变量的scope会覆盖掉全局变量的scope,当离开局部变量的scope后,又重回到全局变量的scope,而当全局变量遇上局部变量时,怎样使用全局变量呢?用window.globalVariableName。
[javascript]
view plain
copy
<script>
var a =1;
function test(){
alert(window.a);
//a为1,这里的a是全局变量哦!
var a=2;
//局部变量a在这行定义
alert(a);
//a为2,这里的a是局部变量哦!
}
test();
alert(a);
//a为1,这里并不在function scope内,a的值为全局变量的值
</script>
JavaSCript全局变量与局部变量
原文:http://www.cnblogs.com/FZ1314/p/7270972.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年09月23日 (328)
2021年09月24日 (313)
2021年09月17日 (191)
2021年09月15日 (369)
2021年09月16日 (411)
2021年09月13日 (439)
2021年09月11日 (398)
2021年09月12日 (393)
2021年09月10日 (160)
2021年09月08日 (222)
最新文章
更多>
2021/09/28 scripts
2022-05-27
vue自定义全局指令v-emoji限制input输入表情和特殊字符
2022-05-27
9.26学习总结
2022-05-27
vim操作
2022-05-27
深入理解计算机基础 第三章
2022-05-27
C++ string 作为形参与引用传递(转)
2022-05-27
python 加解密
2022-05-27
JavaScript-对象数组里根据id获取name,对象可能有children属性
2022-05-27
SQL语句——保持现有内容在后面增加内容
2022-05-27
virsh命令文档
2022-05-27
教程昨日排行
更多>
1.
list.reverse()
2.
Django Admin 管理工具
3.
AppML 案例模型
4.
HTML 标签列表(功能排序)
5.
HTML 颜色名
6.
HTML 语言代码
7.
jQuery 事件
8.
jEasyUI 创建分割按钮
9.
jEasyUI 创建复杂布局
10.
jEasyUI 创建简单窗口
友情链接
汇智网
PHP教程
插件网
关于我们
-
联系我们
-
留言反馈
- 联系我们:wmxa8@hotmail.com
© 2014
bubuko.com
版权所有
打开技术之扣,分享程序人生!