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 相关文章推荐
javascript基本语法分析说明
Jun 15 Javascript
JS禁用浏览器退格键实现思路及代码
Oct 29 Javascript
当前流行的JavaScript代码风格指南
Sep 10 Javascript
js比较日期大小的方法
May 12 Javascript
JS实现页面跳转参数不丢失的方法
Nov 28 Javascript
BootstrapValidator超详细教程(推荐)
Dec 07 Javascript
jQuery学习笔记之入门
Dec 14 Javascript
Vue中v-for的数据分组实例
Mar 07 Javascript
layui的table单击行勾选checkbox功能方法
Aug 14 Javascript
vue-router命名路由和编程式路由传参讲解
Jan 19 Javascript
JavaScript解析JSON数据示例
Jul 16 Javascript
js实现简易计算器功能
Oct 18 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
Symfony数据校验方法实例分析
2015/01/26 PHP
详细解读PHP的Yii框架中登陆功能的实现
2015/08/21 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
php图像验证码生成代码
2017/06/08 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
js模式化窗口问题![window.dialogArguments]
2016/10/30 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
2017/04/29 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
vue实现简单图片上传
2020/06/30 Javascript
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
改进Django中的表单的简单方法
2015/07/17 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
django 实现编写控制登录和访问权限控制的中间件方法
2019/01/15 Python
在python3中实现查找数组中最接近与某值的元素操作
2020/02/29 Python
Django中F函数的使用示例代码详解
2020/07/06 Python
HTML5 预加载让页面得以快速呈现
2013/08/13 HTML / CSS
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
电脑销售顾问自荐信
2014/01/29 职场文书
小班开学寄语
2014/04/04 职场文书
任命书怎么写
2014/06/04 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
Vue3 Composition API的使用简介
2021/03/29 Vue.js
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
zabbix监控mysql的实例方法
2021/06/02 MySQL
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技
python 管理系统实现mysql交互的示例代码
2021/12/06 Python
Go并发4种方法简明讲解
2022/04/06 Golang