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判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
Oct 15 Javascript
深入理解javascript中return的作用
Dec 30 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
Feb 11 Javascript
用jQuery toggleClass 实现鼠标移上变色
May 14 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
Jul 18 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
Jun 30 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
Sep 17 Javascript
Node.js测试中的Mock文件系统详解
Nov 21 Javascript
浅谈JavaScript中的属性:如何遍历属性
Sep 14 Javascript
p5.js入门教程之键盘交互
Mar 19 Javascript
js 将线性数据转为树形的示例代码
May 28 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
Apr 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
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
16个最流行的JavaScript框架[推荐]
2011/05/29 Javascript
javascript打开word文档的方法
2014/04/16 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
解决Angular2 router.navigate刷新页面的问题
2018/08/31 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python信息抽取之乱码解决办法
2017/06/29 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
2017/12/14 Python
python程序输出无内容的解决方式
2020/04/09 Python
Python 下载Bing壁纸的示例
2020/09/29 Python
python实现无边框进度条的实例代码
2020/12/30 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
美国知名保健品网站:LuckyVitamin(支持中文)
2017/08/09 全球购物
迪卡侬印尼体育用品商店:Decathlon印尼
2020/03/11 全球购物
三年级科学教学反思
2014/01/29 职场文书
学习雷锋活动总结
2014/04/29 职场文书
初中教师业务学习材料
2014/05/12 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
百年校庆感言
2015/08/01 职场文书
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python