先看个实例:
[code]
func1();
var a = "hello";
function func1(){
var b = "world";
b = a;
alert(b);
if(false){
var a = "hahaha";
}
}
[/code]
这里有两个问题
1.为什么func1在声明前也可以运行
2.为什么alert(b)会显示未定义“undefined”
要解释这两个问题,只要知道两点就可以。
1.javascript在运行前会有预编译期,会把声明提前(不管这个生命是否真的会运行)
2.局部变量的优先权大于全局变量
所以这个代码的顺序应该是这个样子的
[code]
var a = "hello";
function func1(){ //方法声明放到前面
var b; //局部变量的所有声明都提前,
var a;
b = "world";
b = a;
alert(b);
if(false){
a = "hahaha"; //只有赋值的时候,才在真实的位置
}
}
func1();
[/code]
[code]
func1();
var a = "hello";
function func1(){
var b = "world";
b = a;
alert(b);
if(false){
var a = "hahaha";
}
}
[/code]
这里有两个问题
1.为什么func1在声明前也可以运行
2.为什么alert(b)会显示未定义“undefined”
要解释这两个问题,只要知道两点就可以。
1.javascript在运行前会有预编译期,会把声明提前(不管这个生命是否真的会运行)
2.局部变量的优先权大于全局变量
所以这个代码的顺序应该是这个样子的
[code]
var a = "hello";
function func1(){ //方法声明放到前面
var b; //局部变量的所有声明都提前,
var a;
b = "world";
b = a;
alert(b);
if(false){
a = "hahaha"; //只有赋值的时候,才在真实的位置
}
}
func1();
[/code]