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 相关文章推荐
jQuery 常见开发使用技巧总结
Dec 26 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
Oct 31 Javascript
Jquery代码实现图片轮播效果(一)
Aug 12 Javascript
全面解析多种Bootstrap图片轮播效果
May 27 Javascript
javascript三种代码注释方法
Jun 02 Javascript
带有定位当前位置的百度地图前端web api实例代码
Jun 21 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
Jul 04 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
Aug 11 Javascript
详解webpack分包及异步加载套路
Jun 29 Javascript
简单的vuex 的使用案例笔记
Apr 13 Javascript
Angular 多模块项目构建过程
Feb 13 Javascript
5个实用的JavaScript新特性
Jun 16 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
配置PHP使之能同时支持GIF和JPEG
2006/10/09 PHP
深入了解php4(2)--重访过去
2006/10/09 PHP
基于PHP实现假装商品限时抢购繁忙的效果
2015/10/16 PHP
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
2013/06/12 Javascript
又一枚精彩的弹幕效果jQuery实现
2016/07/25 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
js获取当前周、上一周、下一周日期
2017/03/19 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
vue.js加载新的内容(实例代码)
2017/06/01 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
python中使用enumerate函数遍历元素实例
2014/06/16 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
Python中输入和输出(打印)数据实例方法
2019/10/13 Python
Python连接字符串过程详解
2020/01/06 Python
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
学生实习推荐信范文
2013/11/26 职场文书
应届大学生求职信
2013/12/01 职场文书
企业总经理岗位职责
2014/02/13 职场文书
给校长的建议书400字
2014/05/15 职场文书
小学生优秀评语
2014/12/29 职场文书
浅谈pytorch中的dropout的概率p
2021/05/27 Python
详解SQL的窗口函数
2022/04/21 Oracle
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库