如下一段代码:
var a = 'a';
say();
function say() {
console.log(a);
var a = 'b';
cosnole.log(a);
}
为何会返回undefined?
var申明的变量会预定义赋值为undefined,访问的并不是window下的a,你的代码等价于下面的
function say() {
var a=undefined;
console.log(a);
a = 'b';
cosnole.log(a);
}
我个人所了解的:var 可以代替整型,字符串,boolean类型
看你上面的代码:第一个consol.log(a),应该输入的 a
第一个consol.log(a),应该输入的 b 吧原来的a='b'覆盖了a='a'
当然是undefined,!作用域的概念先搞清楚,!!var 出现是定义变量,在全局域和 say函数域都用定义a,所以console.log读取的是say域的a变量,同时又早于它初始化的语句,所以还没来得及初始化a的值。
解决方法有两:!去掉say函数的var关键字!!将var行的内容放到say函数的开头。
唉,竟然看到回答者360被请出门外了
ask.csdn.net为毛老这样,点“我要回答”没反应也没提示,等我多点几下就发了好几条出去了。
这不是var有几层意思的问题,是关于变量的作用域和提前声明的问题,上面的代码可解释成
var a = 'a'; //全局变量a,值为"a"
say();
function say() {
console.log(a); //此处的a在下面已声明,但还未定义,所以会输出undefined
var a = 'b'; //声明一个局部变量a,在整个函数体内有效
cosnole.log(a); //输出b
}
上面的代码可改写成如下:
var a = 'a';
say();
function say() {
var a;
console.log(a);
a = 'b';
cosnole.log(a);
}
关于undefined的解释,如果是变量时,表明变量未初始化,对于一些基础,我建议可以看看《javascript 权威指南》