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 相关文章推荐
JS中剪贴板兼容性、判断复制成功或失败
Mar 09 Javascript
基础的prototype.js常用函数及其用法
Mar 10 Javascript
jQuery Ajax文件上传(php)
Jun 16 Javascript
juqery 学习之四 筛选查找
Nov 30 Javascript
js获取UserControl内容为拼html时提供方便
Nov 02 Javascript
jQuery提示效果代码分享
Nov 20 Javascript
javascript生成大小写字母
Jul 03 Javascript
详解JavaScript中双等号引起的隐性类型转换
May 30 Javascript
微信小程序实现购物页面左右联动
Feb 15 Javascript
JavaScript展开操作符(Spread operator)详解
Jul 20 Javascript
解决VUEX的mapState/...mapState等取值问题
Jul 24 Javascript
vue2.0 watch里面的 deep和immediate用法说明
Oct 30 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
html中select语句读取mysql表中内容
2006/10/09 PHP
一家之言的经验之谈php+mysql扎实个人基本功
2008/03/27 PHP
php绘制一条直线的方法
2015/01/24 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
2015/03/20 Javascript
javascript中eval函数用法分析
2015/04/25 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
Javascript实现单例模式
2016/01/24 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
vue中的数据绑定原理的实现
2018/07/02 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
Vue.Draggable拖拽功能的配置使用方法
2020/07/29 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
js实现微信聊天界面
2020/08/09 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
python使用marshal模块序列化实例
2014/09/25 Python
Python标准库之Sys模块使用详解
2015/05/23 Python
Python 爬虫学习笔记之多线程爬虫
2016/09/21 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
numpy基础教程之np.linalg
2019/02/12 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
Python任务自动化工具tox使用教程
2020/03/17 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
Django视图类型总结
2021/02/17 Python
IE下实现类似CSS3 text-shadow文字阴影的几种方法
2011/05/11 HTML / CSS
CSS3 实现弹跳的小球动画
2020/10/26 HTML / CSS
入伍通知书
2015/04/23 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python
python区块链实现简版工作量证明
2022/05/25 Python