Javascript的陷阱

阅读更多
先看个实例:
	func1();
	var a = "hello";
	function func1(){
		var b = "world";
		b = a;
		alert(b);
		if(false){
			var a = "hahaha";
		}
	}

这里有两个问题
1.为什么func1在声明前也可以运行
2.为什么alert(b)会显示未定义“undefined”

要解释这两个问题,只要知道两点就可以。
1.javascript在运行前会有预编译期,会把声明提前(不管这个生命是否真的会运行)
2.局部变量的优先权大于全局变量

所以这个代码的顺序应该是这个样子的
	var a = "hello";
	function func1(){   //方法声明放到前面
		var b;      //局部变量的所有声明都提前,
                var a;
                b = "world";
		b = a;
		alert(b);
		if(false){
		   a = "hahaha";  //只有赋值的时候,才在真实的位置
		}
	}
        func1();

你可能感兴趣的:(JavaScript)