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 相关文章推荐
用js实现in_array的方法
Nov 05 Javascript
jquery datatable后台封装数据示例代码
Aug 07 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
Dec 24 Javascript
基于JavaScript实现瀑布流效果
Mar 29 Javascript
vue.js实例todoList项目
Jul 07 Javascript
基于JavaScript中标识符的命名规则介绍
Jan 06 Javascript
Vue CLI3 开启gzip压缩文件的方式
Sep 30 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
Jan 12 Javascript
基于小程序请求接口wx.request封装的类axios请求
Jul 02 Javascript
Vue移动端项目实现使用手机预览调试操作
Jul 18 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
Dec 10 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 Vue.js
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
香妃
2021/03/03 冲泡冲煮
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
PHP操作XML作为数据库的类
2010/12/19 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
PHP Smarty模版简单使用方法
2016/03/30 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
2016/11/09 PHP
Javascript实现的分页函数
2007/02/07 Javascript
简单js代码实现selece二级联动(推荐)
2014/02/18 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
2015/09/01 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
jQuery事件详解
2017/02/23 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
Angular PWA使用的Demo示例
2019/01/31 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
vue+AI智能机器人回复功能实现
2020/07/16 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
Python实现的多线程http压力测试代码
2017/02/08 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
python 字典中取值的两种方法小结
2018/08/02 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
2019/12/30 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
Django数据库迁移常见使用方法
2020/11/12 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
十岁生日同学答谢词
2014/01/19 职场文书
奥巴马英文演讲稿
2014/05/15 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
安全责任协议书范本
2016/03/23 职场文书
java基础——多线程
2021/07/03 Java/Android
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android