请写出弹出值,并解释为什么。~function () { alert(a); a(); var a = function () { console.log(1); } function a() { console.log(2); } alert(a) a(); var c = d = a;}();alert(d); alert(c);
3 回答
HUX布斯
TA贡献1876条经验 获得超6个赞
包括打印和alert的值如下:
1、
function a() { console.log(2); }
2、2
3、
function a() { console.log(1); }
4、1
5、
function a() { console.log(1); }
原因: var c = d = a;
从右向左执行,d=a
,d没有使用var声明,是一个全局变量,方法外部可访问。
6、报错,原因:c是函数内部的变量,外部访问不到的,外部变量c是undefined。
其它的就不一一解释原因了,本质就是变量提升和函数声明提升的问题。
慕工程0101907
TA贡献1887条经验 获得超5个赞
1: function a() {
console.log(2);
}
2,3 var a = function () {
console.log(1);
}
4: 报错
因为 函数提升优于变量提升 且 变量提升只声明不赋值, 局部变量作用于局部
HUWWW
TA贡献1874条经验 获得超12个赞
实际上,这段代码是这么跑的:
~function () {
//hoisting
function a() {
console.log(2);
}
var a;
alert(a);
a();
a = function () {
console.log(1);
}
alert(a)
a();
d = a;
var c = d;
}();
alert(d);
alert(c);
添加回答
举报
0/150
提交
取消