javascript有两种变量:局部变量和全局变量。固然,咱们这篇文章是帮助你们真正的区别这两种变量。javascript
首先,局部变量是指只能在本变量声明的函数内部调用。全局变量时整个代码中均可以调用的变量。固然,单单从字面上理解确定是不清楚的,下面我详细的介绍下:
你们都知道,变量是须要用var关键字声明的。可是javascript中也能够隐式的使用变量,就是不用声明,直接使用。并且,千万注意,javascript把隐式声明的变量老是当成全局变量来使用的。
例如:java
复制代码 代码以下:函数
function myName() {
i = 'yuanjianhang';
}
myName();
function sayName() {
alert(i);
}
sayName();.net
输出结果为:yuanjianhanghtm
这说明变量i就是一个全局的变量,若是把上面的代码改为以下:ip
复制代码 代码以下:io
function myName() {
var i='yuanjianhang';
}
myName();
function sayName() {
alert(i);
}
sayName();function
此时,游览器将没有任何输出结果,由于i 是在函数myName中定义的,因此它只是myName的局部变量,不可能被外部调用。
如今再回过头来看下面的代码:变量
复制代码 代码以下:script
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
更多例子以下:
http://www.jb51.net/article/61442.htm