javascript中局部变量和全局变量的区别详解


Posted in Javascript onFebruary 27, 2015

javascript有两种变量:局部变量和全局变量。当然,我们这篇文章是帮助大家真正的区别这两种变量。

首先,局部变量是指只能在本变量声明的函数内部调用。全局变量时整个代码中都可以调用的变量。当然,单单从字面上理解肯定是不清楚的,下面我详细的介绍下:
大家都知道,变量是需要用var关键字声明的。但是javascript中也可以隐式的使用变量,就是不用声明,直接使用。而且,千万注意,javascript把隐式声明的变量总是当成全局变量来使用的。
例如:

function myName() {

 i = 'yuanjianhang';

}

myName();

function sayName() {

 alert(i);

}

sayName();

输出结果为:yuanjianhang

这说明变量i就是一个全局的变量,如果把上面的代码改成如下:

function myName() {

 var i='yuanjianhang';

}

myName();

function sayName() {

 alert(i);

}

sayName();

此时,游览器将没有任何输出结果,因为i 是在函数myName中定义的,所以它只是myName的局部变量,不可能被外部调用。
 
现在再回过头来看下面的代码:

function myName() {

 i = 'yuanjianhang';

}

myName();

function sayName() {

 alert(i);

}

sayName();

现在,我们进行一下改动,把myName();去掉,代码如下:

function myName() {

 i = 'yuanjianhang';

}

function sayName() {

 alert(i);

}

sayName();

 此时,游览器也不会有如何反应。因为虽然i是全局变量,但是函数myName()并没有被调用,所以就相当于虽然声明了i,但是并没有给i赋予任何的值,所以没有任何输出。
同理,如果把上例改成:
 

function myName() {

 

 i = 'yuanjianhang';

}

function sayName() {

 alert(i);

}

sayName();

myName();

这种情况下还是不会输出任何结果,javascript代码的执行时从上到下的,在sayName()函数被调用时会检查变量i的值,此时函数myName尚未执行,也就是说i还没有被赋值,所以不会输出任何结果。
 
为了方便大家更好的理解,这里再举一个例子:

var i = 'yuanjianhang';

function myloveName() {

 i = 'guanxi';

}

myloveName();

function myName() {

 alert(i);

}

myName();

这次的结果是什么呢?
答案是guanxi
首先,i的原始值是yuanjianhang,但是当调用myloveName()函数之后,将i的值改为guanxi,所以最后的输出结果是guanxi。

如果将代码改为:

var i = 'yuanjianhang';

function myloveName() {

 var i = 'guanxi';

}

myloveName();

function myName() {

 alert(i);

}

myName();

此时的结果就是yuanjianhang了,因为代码中的两个i不一样,一个是全局的,一个是局部的,也可以这样理解,虽然两个i的名字一样,但是这两个i的本质却不一样,好像有两个名字一样的人一样,虽然名字一样,但却不是同一个人。

如果将代码改造成这样:

var i = 'yuanjianhang';

function myloveName() {

 i = 'guanxi';

}

function myName() {

 alert(i);

}

myName();

myloveName();

相信大家可以自己算出结果了,结果是yuanjianhang。

既然函数内部可以调用全局变量,那么下面这种情况呢:

var i = 'yuanjianhang';

function myloveName() {

  i = 'guanxi';

 alert(i);

}

myloveName();

此时变量的值是哪个呢?

我们来分析下:

首先全局变量i被赋值为:yuanjianhang。

接下来myloveName()函数被调用,全局变量i被重新赋予新的值:guanxi

所以结果肯定是:guanxi。

如果我们把alert提前呢,像这样:

var i = 'yuanjianhang';

function myloveName() {

  alert(i);

 i = 'guanxi';

}

myloveName();

这时候结果是什么呢?
经过验证结果是:undefined
如果代码是这样呢:

var i = 'yuanjianhang';

function myloveName() {

  alert(i);

}

myloveName();

此时i的结果是:yuanjianhang

为什么会发生上面undefined情况,因为代码的执行顺序是从上到下的,在输出i之前并没有对i定义。所以从这里可以看出,使用代码的时候,变量的声明一定要放到代码的前面,以避免出现类似的问题!

同理:

var i = 'yuanjianhang';

function myloveName() {

 alert(i);

 var i = 'guanxi';

 

}

myloveName();

这种情况下也会输出:undefined

好了,关于变量我只有这么多的介绍了,相信这些任何人都可以看明白。不管代码如何复制,其核心是不会变的。

以上就是本文的全部内容了,小伙伴们对于javascript中局部变量和全局变量的区别是否有了更深刻的认识了呢,祝大家新年快乐~学习愉快。

Javascript 相关文章推荐
(function(){})()的用法与优点
Mar 11 Javascript
javascript 日期时间 转换的方法
Feb 21 Javascript
jQuery表格插件datatables用法总结
Sep 05 Javascript
使用百度地图api实现根据地址查询经纬度
Dec 11 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
Mar 21 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
Jul 01 Javascript
Angular.js去除页面中显示的空行方法示例
Mar 30 Javascript
vue自定义指令的创建和使用方法实例分析
Dec 04 Javascript
JS异步执行结果获取的3种解决方式
Feb 19 Javascript
vue.js购物车添加商品组件的方法
Sep 17 Javascript
vue实现跳转接口push 转场动画示例
Nov 01 Javascript
解决ele ui 表格表头太长问题的实现
Nov 13 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
Feb 27 #Javascript
JavaScript中Function详解
Feb 27 #Javascript
JS实现图片产生波纹一样flash效果的方法
Feb 27 #Javascript
js实现鼠标触发图片抖动效果的方法
Feb 27 #Javascript
javascript实现当前页导航激活的方法
Feb 27 #Javascript
jquery 根据name名获取元素的value值
Feb 27 #Javascript
jQuery使用元素属性attr赋值详解
Feb 27 #Javascript
You might like
MySQL时间字段究竟使用INT还是DateTime的说明
2012/02/27 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
php通过分类列表产生分类树数组的方法
2015/04/20 PHP
PHP常用的三种设计模式
2017/02/17 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
js输入框使用正则表达式校验输入内容的实例
2017/02/12 Javascript
详解vue-router 命名路由和命名视图
2018/06/01 Javascript
chosen实现省市区三级联动
2018/08/16 Javascript
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
2015/04/28 Python
python编写暴力破解zip文档程序的实例讲解
2018/04/24 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
Python 项目转化为so文件实例
2019/12/23 Python
Python实现手势识别
2020/10/21 Python
python实现发送QQ邮件(可加附件)
2020/12/23 Python
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
世界上第一个水枕头:Mediflow
2018/12/06 全球购物
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
程序集与命名空间有什么不同
2014/07/25 面试题
庆中秋节主题活动方案
2014/02/03 职场文书
吸烟检讨书2000字
2014/02/13 职场文书
信用社竞聘演讲稿
2014/05/16 职场文书
本科毕业生自荐信
2014/05/26 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书