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 相关文章推荐
jsTree 基于JQuery的排序节点 Bug
Jul 26 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
Mar 23 Javascript
举例说明如何为JavaScript的方法参数设置默认值
Nov 17 Javascript
Bootstrap每天必学之按钮
Nov 26 Javascript
Wireshark基本介绍和学习TCP三次握手
Aug 15 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
Nov 21 Javascript
JS中的Replace()传入函数时的用法详解
Sep 11 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
Dec 26 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
Nov 29 Javascript
vue-autoui自匹配webapi的UI控件的实现
Mar 20 Javascript
基于Vue中的父子传值问题解决
Jul 27 Javascript
vue的webcamjs集成方式
Nov 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 cache类代码(php数据缓存类)
2010/04/15 PHP
ThinkPHP自动验证失败的解决方法
2011/06/09 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
PHP CURL与java http使用方法详解
2018/01/26 PHP
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
2016/04/20 Javascript
全面解析bootstrap格子布局
2016/05/22 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
vue实例中data使用return包裹的方法
2018/08/27 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
轻松实现python搭建微信公众平台
2016/02/16 Python
Python引用传值概念与用法实例小结
2017/10/07 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
pytest中文文档之编写断言
2019/09/12 Python
python Pillow图像处理方法汇总
2019/10/16 Python
如何使用python进行pdf文件分割
2019/11/11 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
python numpy实现rolling滚动案例
2020/06/08 Python
史上最详细的Python打包成exe文件教程
2021/01/17 Python
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
数控加工专业毕业生自荐信
2013/09/27 职场文书
商场客服专员岗位职责
2014/06/13 职场文书
员工自我评价范文
2015/03/11 职场文书
同学聚会致辞集锦
2015/07/28 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python
python自然语言处理之字典树知识总结
2021/04/25 Python
解析redis hash应用场景和常用命令
2021/08/04 Redis