请问下面的函数 a 输出什么? 为什么是这个值?
[code="java"]var i = 3;
function a(){
alert("i = " + i);
var i = 5;
}
a();[/code]
var i = 3;
function a(){
alert("i = " + i);
var i = 5;
}
a();
因为javascript的变量提前声明特性 即如上代码等价于
var i = 3;
function a(){
var i;
alert("i = " + i); //此时就是undefined了
i = 5;
}
a();
说白了 变量声明都会在函数开头完成 不管你怎么写的
js是有个预编译的过程的,请参考这个http://smiky.iteye.com/admin/blogs/1564549
这是因为javascript 内部变量和外部便量名字相同时,内部变量的级别高与外部变量的级别。再根据javascript的变量声明的hoisting机制,变量声明永远都会被提升至作用域的最顶端,所以alert 才会有一个undefined.
undefined,说白了就是javascript解析器智障了,良好的编程习惯根本不会出现这种问题