var test; //打印出 undefined console.log(test);
首先上面的代码没有问题,打印出 undefined。
接下来是下面的代码:
function test() { return "this is function"; } var test; //打印的是 test 函数的方法体 console.log(test);
问题在这里,当函数和变量重名时,js 代码是从上至下执行的,那么为啥打印的是 test 函数体,而不是后面声明没有赋值的 test 变量,即打印出 undefined。
问题简化一下就是,在函数和变量同名的时候,为啥 console.log 的参数取得是函数,不是变量。
如果重新声明 JavaScript 变量,该变量的值不会丢失
http://www.w3school.com.cn/js/js_variables.asp
这是赋值的先后与存活期问题。
无论是先声明var a 还是先声明 function a ,最终打印的结果是一样的。 这是因为:
1、两者都存在变量提升的问题
2、如果先声明 function a, 然后,当声明 var a 时,发现a已存在,就不做任何处理, 因此 a 中保存的是函数体。
2、如果先声明 var a, 当然后,当声明 function a 时,发现a已存在,就重写a为函数体,因此 a 中保存的也是函数体。
变量提升!!
var test; 和 var test = undefined; 是不同的,如果这样写:
function test() {
return "this is function";
}
var test = undefined;;
console.log(test);
此时打印出的就是 undefined,这样就能理解了。