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

JavaScript 关于面试题

JavaScript 关于面试题

莫回无 2019-02-25 17:44:57
请写出弹出值,并解释为什么。~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


查看完整回答
反对 回复 2019-03-06
?
湖上湖

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。

其它的就不一一解释原因了,本质就是变量提升和函数声明提升的问题。


查看完整回答
反对 回复 2019-03-06
  • 2 回答
  • 0 关注
  • 380 浏览
慕课专栏
更多

添加回答

举报

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