为了方便大家更好的理解,这里再举一个例子: 复制代码 代码如下: var i = "yuanjianhang"; function myloveName() { i = "guanxi"; } myloveName(); function myName() { alert(i); } myName();
如果将代码改为: 复制代码 代码如下: 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";