Javascript中的变量使用说明


Posted in Javascript onMay 18, 2010

javascript中的所有变量都是类型松散的,不同于其他面向对象语音的变量声明都是强类型的.因此Javascript 的变量声明是不包括类型的。通过var关键字或者直接写变量名来声明一个变量,如:
var v = 1;
v=1;

这时有人可能会问,上述的两种声明有什么区别,为什 么会有这两种不同的声明方式,这就涉及到javascript中变量的作用域了。在javascript中,变量的作用域包括全局和函数级别的。

全局变量可以声明在函数体外,无论使用上述的哪种声明方式,在函数体外 声明的变量都是全局变量。如:

<script type="text/javascript" language="javascript"> 
var v = 1; function foo() 
{ 
alert(v); 
} 
w = 2; 
function bar() 
{ 
alert(w); 
} 
foo(); 
</script>

运行结果:1 2

另外,在函数内部声明的变量如果不使用var关键字,声明的变量也将是全局变量。如:

<script type="text/javascript" language="javascript"> 
function foo() 
{ 
v = 1; 
} foo(); 
alert(v); 
</script>

运行结果:1
但是需要注意,这种情况下,若要使用变量,必须先调用声明变量的函数对变量进行初始化, 如foo(),否则,将会出现“变量v未定义”的错误。

全局变量将作为window对象的属性存在,因为可以 通过window.$($表示变量名)访问。当然也可以通过变量名直接访问。下面会讲到为什么有这两种访问方式。

在函数内部通过var关键字声明的变量将是函数级别的变量,其作用域仅仅限于函数内部。如:

<script type="text/javascript" language="javascript"> 
function foo() 
{ 
var v=1; 
alert(v); 
} alert(v); 
</script>

运行结果:1 变量“v”未定义

通过上面的分析,可以发现关键字var主要作用 是定义函数级别的变量。

细心的朋友可以会问,如果在函数内部和外部定义了相同的变量,会是什么样的结果呢?如:

<script type="text/javascript" language="javascript"> 
var v=1; 
function foo() 
{ 
alert(v); 
var v=2; 
} foo(); 
</script>

运行结果:undefined
!!!!!也许有人会比较郁闷了,v明明白白的定义在函数foo()体外,为什么会是 undefined呢?这就涉及到javascript的解析了。根据经验,javascript对于函数体内变量的解析过程是:
搜索所有的 var关键字,将其变量声明放到函数体的最前面,赋值和使用仍然保持不变,这样,上面的javascript实际上是等同于:
<script type="text/javascript" language="javascript"> 
var v=1; 
function foo() 
{ 
var v; 
alert(v); 
v=2; 
} foo(); 
</script>

照此分析,产生上述 的结果就显而易见了,由于函数内部的变量的优先级高于全局变量的优先级(大部分的编程语言都是这样), 函数内部的变量v覆盖了全局变量v,但是由于在使用函数内部变量v时,它仅仅声明,但未赋值,因此结果是undefined。

如果在方法 体内仍然要使用定义的全局变量v,window对象此时派上大大的用场了,可以通过window.v来访问。如:

<script type="text/javascript" language="javascript"> 
var v=1; 
function foo() 
{ 
alert(window.v); 
alert(v); 
var v=2; 
} foo(); 
</script>

运行结果:2 undefined
Javascript 相关文章推荐
Convert Seconds To Hours
Jun 16 Javascript
在IE下获取object(ActiveX)的Param的代码
Sep 15 Javascript
JavaScript日历实现代码
Sep 12 Javascript
php跨域调用json的例子
Nov 13 Javascript
Event altKey,ctrlKey,shiftKey属性解析
Dec 18 Javascript
JS cookie中文乱码解决方法
Jan 28 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
Nov 25 Javascript
javascript 缓冲运动框架的实现
Sep 29 Javascript
vue自定义过滤器创建和使用方法详解
Nov 06 Javascript
vue解决一个方法同时发送多个请求的问题
Sep 25 Javascript
JS中的模糊查询功能
Dec 08 Javascript
javascript History对象原理解析
Feb 17 Javascript
Javascript实现的鼠标经过时播放声音
May 18 #Javascript
JavaScript 继承机制的实现(待续)
May 18 #Javascript
JavaScript 面向对象编程(2) 定义类
May 18 #Javascript
JavaScript 面向对象编程(1) 基础
May 18 #Javascript
Javascript Object.extend
May 18 #Javascript
Jsonp 跨域的原理以及Jquery的解决方案
May 18 #Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
May 18 #Javascript
You might like
Yii2.0表关联查询实例分析
2016/07/18 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
PHP获取文本框、密码域、按钮的值实例代码
2017/04/19 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
深入理解JavaScript定时机制
2016/10/27 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
解决vue-cli中stylus无法使用的问题方法
2017/06/19 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
2018/07/18 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
JavaScript实现多个物体同时运动
2020/03/12 Javascript
JS call()及apply()方法使用实例汇总
2020/07/11 Javascript
[01:37]DOTA2超级联赛专访ChuaN 传奇般的电竞之路
2013/06/19 DOTA
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
[01:02:06]LGD vs Mineski Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
python统计文本文件内单词数量的方法
2015/05/30 Python
浅谈python中的变量默认是什么类型
2016/09/11 Python
python 获取网页编码方式实现代码
2017/03/11 Python
python 表格打印代码实例解析
2019/10/12 Python
Python爬虫开发与项目实战
2020/12/16 Python
仓库管理制度
2014/01/21 职场文书
电气自动化专业职业规划范文
2014/02/16 职场文书
外贸采购员岗位职责
2014/03/08 职场文书
2014年国庆标语
2014/06/30 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
反腐倡廉主题教育活动总结
2015/05/07 职场文书
2015年底工作总结范文
2015/05/15 职场文书
新年晚会开场白
2015/05/29 职场文书
2015教师个人师德工作总结
2015/10/23 职场文书
小学中队长竞选稿
2015/11/20 职场文书
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python