请写出弹出值,并解释为什么。~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);
2 回答
慕无忌1623718
TA贡献1744条经验 获得超4个赞
实际上,这段代码是这么跑的:
~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);
参考:hoisting
湖上湖
TA贡献2003条经验 获得超2个赞
包括打印和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。
其它的就不一一解释原因了,本质就是变量提升和函数声明提升的问题。
添加回答
举报
0/150
提交
取消