为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript 关于面试题

JavaScript 关于面试题

慕盖茨4494581 2018-08-01 16:26:23
请写出弹出值,并解释为什么。~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。
其它的就不一一解释原因了,本质就是变量提升和函数声明提升的问题。


查看完整回答
反对 回复 2018-08-05
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

1: function a() {

console.log(2);

}

2,3 var a = function () {

console.log(1);

}

4: 报错
因为 函数提升优于变量提升 且 变量提升只声明不赋值, 局部变量作用于局部


查看完整回答
反对 回复 2018-08-05
?
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);


查看完整回答
反对 回复 2018-08-05
  • 3 回答
  • 0 关注
  • 928 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信