// 一.全局变量与局部变量:局部变量是指只能在本变量声明的函数内部调用。全局变量时整个代码中都可以调用的变量
// 单单从字面上很难理解 来我们看实际代码: function myName() { i = 'xiaoming'; } myName(); function sayName() { alert(i); } sayName(); /*输出结果为:xiaoming 现在来修改上面的代码:*/ function myName(){ i="xiaoming"; } myName(); function sayName(){ alert(i); } sayName(); // 此时,游览器将没有任何输出结果,因为i 是在函数myName中定义的,所以它只是myName的局部变量,不可能被外部调用。 // 同理再改 function myName(){ i="xiaoming"; } function sayName(){ alert(i); } sayName(); myName(); // 这种情况下还是不会输出任何结果,javascript代码的执行时从上到下的,在sayName()函数被调用时会检查变量i的值,此时函数myName尚未执行,也就是说i还没有被赋值,所以不会输出任何结果。 // 为了方便理解 再举一例 var i="xiaoming"; function loveName(){ i="xiaohong"; } loveName(); function myName(){ alert(i); } myName(); // 结果是xiaohong // 首先,i的原始值是xiaoming,但是当调用loveName()函数之后,将i的值改为xiaohong,所以最后的输出结果是xiaohong。 var i = 'xiaoming'; function myloveName() { var i = 'xiaohong'; } myloveName(); function myName() { alert(i); } myName(); // 此时的结果就是xiaohong了,因为代码中的两个i不一样,一个是全局的,一个是局部的,也可以这样理解,虽然两个i的名字一样,但是这两个i的本质却不一样,好像有两个名字一样的人一样,虽然名字一样,但却不是同一个人。 var i = 'xiaoming'; function myloveName() { i = 'xiaohong'; alert(i); } myloveName(); // 结果是:xiaohong // 如果把alert提前呢? var i = 'xiaoming'; function myloveName() { alert(i); i = 'xiaohong'; } myloveName(); 结果是:undefined 如果代码是这样: var i = 'xiaoming'; function myloveName() { alert(i); } myloveName(); // 结果是:xiaoming // 为什么会发生上面undefined情况,因为代码的执行顺序是从上到下的,在输出i之前并没有对i定义。所以从这里可以看出,使用代码的时候,变量的声明一定要放到代码的前面,以避免出现类似的问题!