深圳市伙伴行网络科技有限公司(套题)

深圳市 2018-10-18 224
选择题 填空题 问答题 编程题 试题难度
0 0 5 0 一般
试题信息收集不易,转发请带上出处,不甚感谢!如果您对任何编程问题还有疑问,欢迎点击下方按钮向老师提问!
问答题
  • 1、下面代码打印结果分别是什么?
    function a(){	
      this.name='HB';	
      console.log(this.name)
    }
    b={	
      name:'HB',	
      fn:() => {		
        console.log(this.name, this)	 
      }
    }
    a();
    b.fn();
    console.log(a.name);
    console.log(this.name)
  • 本题主要考察的事this在JavaScript中的用法,涉及到原型和箭头函数

    打印顺序依次为

    HB

    HB ,Window

    a

    HB

    解析:1.首先大家要明白在全局作用域中,当代码在浏览器中执行的时候,所有的全局变量和函数都被定义在 window 对象上。因此,当我们在全局函数中使用 this 的时候,它会指向全局 window 对象并且拥有它的值(除非在严格模式下),此时的 this 就成了整个 JavaScript 应用程序或者说整个网页的主容器。所以,在a()里面的this是指向全局的,所以会打印HB

    2.b.fn() 本来按照我们的理解,这里面的this指向的是b这个对象,不过由于出现了箭头函数,那么我们需要记住一个结论,箭头函数中的this指向的是定义时的this,而不是执行时的this,所以定义是的this,指向的事Window,所以会打印HB ,Window

    3.a.name为什么会打印出a呢,我想大家可能对这个有点疑问,那么接下就由我来解释一下,在a函数里面是没有name这个属性的, 但是如果你打印一下a.prototype这个属性,你就会发现在a的原型里面有name这个属性,我们都知道,打印一个对象的时候先从本身找有没有这个属性,如果没有会根据原型链来寻找,一直到null为止

    4.this.name这个就没什么争议了,全局的变量name,HB


  • 2、描述一下你常用的提升页面性能的方法?
  • 1.减少http请求

    HTTP协议是无状态的应用层协议,意味着每次HTTP请求都需要简历通信链路,进行数据传输,而在服务器端,每个HTTP都需要启动独立的线程去处理,这些通信和服务的开销都很昂贵,减少HTTP请求的数目可有效提高访问性能。

    减少HTTP请求的主要手段是合并CSS,合并JavaScript,合并图片。将浏览器一次访问需要的JavaScript,CSS合并成一个文件,这样浏览器就只需要一次请求。多张图片合并成一张,如果每张图片都有不同的超链接,可通过CSS偏移响应鼠标点击操作,构造不同的URL。

    (2)使用浏览器缓存

    对一个网站而言,CSS,JavaScript,Logo,图标等这些静态资源文件更新的频率都比较低,而这些文件又几乎是每次HTTP请求都需要的,如果将这些文件缓存在浏览器中,可以极好地改善性能。通过设置HTTP头中Cache-Control和Expires属性,可设定浏览器缓存,缓存时间可以是数天甚至是几个月。有时候,静态资源文件变化需要及时应用到客户端浏览器,这种情况可以通过改变文件名实现,比如一般会在JavaScript后面加上一个版本号,使浏览器刷新修改的文件。

    (3)启用压缩

    在服务器端对文件进行压缩,在浏览器端对文件解压缩,可有效较少通信传输的数据量。文本文件的压缩效率科大80%以上。

    (4)CSS放在页面最上面,JavaScript放在页面最下面

    浏览器会在下载完全部CSS之后对整个页面进行渲染,因此最好的做法是将CSS放在页面最上面,让浏览器尽快下载CSS。JS则想法,浏览器在加载JS后立即执行,有可能会阻塞整个页面,造成页面显示缓慢,因此JS最好放在页面最下面。

  • 3、描述一下ES6、ES7中你常用的新特性
  • ES6常用新特性

    • let && const
    • iterable类型
    • 解构赋值
    • =>函数
    • ...操作符

    ES7新特性

    • Array.prototype.includes
    • Exponentiation Operator(求幂运算)
  • 4、描述一下队列与栈的区别,并用JavaScript描述相关操作
  • 首先要先了解一下什么是队列和栈

    队列的基本概念

    队列:是一种支持先进先出(FIFO)的集合,即先被插入的数据,先被取出!

    堆栈的基本概念

    堆栈:是一种支持后进先出(LIFO)的集合,即后被插入的数据,先被取出!

    区别:

    1.删除数据元素的位置不同,栈的删除操作在表尾进行,队列的删除操作在表头进行。

    2.应用场景不同;常见栈的应用场景包括括号问题的求解,表达式的转换和求值,函数调用和递归实现,深度优先搜索遍历等;常见的队列的应用场景包括计算机系统中各种资源的管理,消息缓冲器的管理和广度优先搜索遍历等。

    3.顺序栈能够实现多栈空间共享,而顺序队列不能。

    JavaScript实现

    在面向对象的程序设计里,一般都提供了实现队列(queue)和堆栈(stack)的方法, 在 JavaScript 中,可以使用数组及其相关操作来模拟栈操作。,来实现队列和堆栈的功能,看下面的相关介绍.

    看一下它们的性质,这种性质决定了它们的使用场合

    队列:是一种支持先进先出(FIFO)的集合,即先被插入的数据,先被取出!

    堆栈:是一种支持后进先出(LIFO)的集合,即后被插入的数据,先被取出!

    代码如下

    var a=new Array();

    a.unshift(1);

    a.unshift(2);

    a.unshift(3);

    a.unshift(4);

    console.log("先进先出")

    a.pop()

    var a=new Array();

    a.push(1);

    a.push(2);

    a.push(3);

    a.push(4);

    console.log("后进先出")

    a.pop()

  • 5、使用JavaScript将一个无序的数组改变成有序(不能使用sort函数,并预估可能出现问题并解决)。(如:[1,5,3,4,2]=>[1,2,3,4,5])
  • 可以使用冒泡排序的方式,写了一个函数,代码如下

    function bubbleSort (arr) {

      for (var i = 0; i < arr.length-1; i++) {

        for (var j = 0; j < arr.length-1-i; j++) {

          if (arr[j] > arr[j+1]) {

            /* 设置第三方变量来用于数据交换,且这个变量放在循环的外面性能要好

            var temp = arr[j];

            arr[j] = arr[j+1];

            arr[j+1] = temp;

            */


     // 利用加法来实现两个数据的交换

            // arr[j] = arr[j] + arr[j+1];

            // arr[j+1] = arr[j] - arr[j+1];

            // arr[j] = arr[j] - arr[j+1];


     // 利用位运算实现两个数据的交换

            arr[j] = arr[j]^arr[j+1];

            arr[j+1] = arr[j]^arr[j+1];

            arr[j] = arr[j]^arr[j+1];   

          }

        };

      };

      return arr;


还能输入{{limitInput-companyComment.length}}个字符