前端面试题

作者: 前端的成长之路 | 来源:发表于2017-11-28 10:26 被阅读0次

//第一题

    (1)

    * 代码看起来是想说:如果window不包含属性a,就声明一个变量a,然后赋值为1。

    * 你可能认为alert出来的结果是1,然后实际结果是“undefined”。要了解为什么,我们需要知道JavaScript里的3个概念。

    *首先,所有的全局变量都是window的属性,语句 var a = 1;等价于window.a = 1; 你可以用如下方式来检测全局变量是否声明:

    if (!("a" in window)) {

        var a = 1;

    }

    console.log(window.a);//undefined

    alert(a);  //undefined

    //(2):解析

    * 此时,尽管声明是在alert之后,alert弹出的依然是true,

    * 这是因为JavaScript引擎首先会扫墓所有的变量声明,然后将这些变量声明移动到顶部,

    alert("b" in window); //true

    var b;

    // 最终的代码效果是这样的:

    /!*var b;

    alert("b" in window);*!/

你真懂js吗?

//题目二

    var a = 1,

            b = function a(x) {

                x && a(--x);

            };

    alert(a);//1

    * 这个题目看起来比实际复杂,alert的结果是1;这里依然有3个重要的概念需要我们知道。

    * 首先,在题目1里我们知道了变量声明在进入执行上下文就完成了;

    * 第二个概念就是函数声明也是提前的,所有的函数声明都在执行代码之前都已经完成了声明,和变量声明一样。

    澄清一下,函数声明是如下这样的代码:

    function functionName(arg1, arg2){

    //函数体

      } ;

    *如下不是函数,而是函数表达式,相当于变量赋值:

    * var functionName = function(arg1, arg2){

        //函数体

    };

    *


//题目三

      function a(x) {

          return x * 2;

      }

      var a;

      alert(a);

      */

    /*

    * 执行a的时候,相应地就弹出了函数a的内容了。


  //题目四

      function b(x, y, a) {

          arguments[2] = 10;

          alert(a);

      }

      b(1, 2, 6);  //10

      function b(x, y, a) {

          arguments[2] = 10;

          alert(a);

      }

      b(1, 2);  //undefined


//题目五

      function a() {

          alert(this);

      }

      a.call(null);

      //(2)

      function method() {

          alert(this === window);

      }

      method();    //true

      method.call(document);  //false

    /*第一个依然是true没什么好说的,第二个传入的调用对象是document,自然不会等于window,所以弹出了false。*/

      function a() {

          alert(this);

      }

      //a.call(window);//[object Window]

      //总结:这5个题目虽然貌似有点偏,但实际上考察的依然是基本概念,只有熟知了这些基本概念才能写出高质量代码。

相关文章

网友评论

    本文标题:前端面试题

    本文链接:https://www.haomeiwen.com/subject/mpjsbxtx.html