JavaScript 关于面试题

请写出弹出值,并解释为什么。


~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); 


莫回无
浏览 381回答 2
2回答

慕无忌1623718

实际上,这段代码是这么跑的:~function () {//hoistingfunction 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

湖上湖

包括打印和alert的值如下:1、function a() {   console.log(2);}2、23、function a() {   console.log(1);}4、15、function a() {   console.log(1);}原因: var c = d = a;从右向左执行,d=a,d没有使用var声明,是一个全局变量,方法外部可访问。6、报错,原因:c是函数内部的变量,外部访问不到的,外部变量c是undefined。其它的就不一一解释原因了,本质就是变量提升和函数声明提升的问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript