• Front-end-Developer-Interview-Questions面试题笔记(三)JS篇[0]


      1、解释下事件代理。

      事件代理就是指并不是在目标元素本身上绑定事件,而是在目标元素的某个父级元素绑定事件,在触发事件时通过target来执行相应的function。

      

      2、解释下 JavaScript 中 this 是如何工作的。

      this会随着不同的场合而改变,他总是指向调用函数的那个对象。

      3、解释下原型继承的原理。

      原型继承意思就是让类a的原型方法从b的原型方法中继承而来。

      实现:a.prototype = new b()

      意思就是让a的prototype指向b的一个新的实例,因为这个b的实例是附带类b的所有原型方法(prototype里的方法),所以就是a的prototype指向类b的所有原型方法,并且是新实例,操作的话不会影响到以前的类b,从而达到了原型继承。

      4、你是如何测试 JavaScript 代码的?

      一般就用alert、console.log这种方式来测试,确实没有用过像QUnit这样的单元测试框架,仅仅是有所了解。

      5、AMD vs. CommonJS?

      CommonJS是JS在后台的模块化的定义规范吧,而AMD是前端的模块化定义规范,代表就是RequireJS,有用过,却没有真的投入到生产项目。

      6、什么是哈希表?

      一种数据结构,就是散列吧。

      7、解释下为什么接下来这段代码不是 IIFE(立即调用的函数表达式):function foo(){ }();要做哪些改动使它变成 IIFE?

      这里只是声明一个叫foo的function,直接用()执行这样是不成功的,想要变成IIFE就要把声明变成表达式,就可以立即执行了,可以这样(function foo(){})()或者(function foo(){}()),这就是用括号把定义强转成表达式,当然还有其他方法,关键就是声明不可以执行,表达式才可以执行。

      8、描述以下变量的区别:nullundefined 或 undeclared?该如何检测它们?

      null是空对象,undefined是数据上的未定义(包括声明了变量但未赋值),undeclared是语法错误?

      用typeof检测,typeof(null) object,typeof(undefined) undefined。

      9、什么是闭包,如何使用它,为什么要使用它?

      闭包就是可以读取到其他函数内部变量的函数。

      基本使用方法就是在函数a内部再创建一个函数b,用函数b来访问函数a的变量,然后把函数b return出去,这样就可以在函数a的外部通过函数b访问到函数a内部的变量了,延伸一下就是可以声明函数内部的私有方法或者变量,外界无法访问,或者仅能通过给出的接口访问。

      可以避免污染全局变量,实现私有方法或者变量等。

      10、请举出一个匿名函数的典型用例?

      document.getElementByID('a').addEventListener('click',function(e){})

      

      11、解释 “JavaScript 模块模式” 以及你在何时使用它

      因为js里没有类似java里命名空间的一些东西,但是又需要合理的管理代码,所以出现了模块模式,在我的理解看来,模块其实就是一个更大的对象,不同的命名空间就是不同的对象,可以简单的把命名空间放在全局变量里,也可以把命名空间作为“模块”这个大对象的一些属性了,当然也可以对这些模块对象的采用闭包来实现,这样就更加模块化一点了。

      12、请指出 JavaScript 宿主对象和原生对象的区别?

      原生对象就是指支撑js这套体系的基础对象,就是ECMAScript官方创建的对象,而宿主对象是指js所处的环境对外提供的API,在网页里DOM和BOM就是宿主对象,不管怎么换环境,原生对象是不会改变的,但是宿主对象会随着环境改变而改变。

      

      13、指出下列代码的区别:

        function Person(){};   //定义一个叫person的function
        var person = Person(); //定义一个叫person的变量使他指向Person这个function
        var person = new Person();  //定义一个叫person的变量是他指向Person的实例化对象
      

      14、.call 和 .apply 的区别是什么?

      .call(obj,element0,element1,element2,element3...)这样来传递变量。

      .apply(obj,elements[])这样来传递变量。

      15、请解释 Function.prototype.bind

      理解了call的话就很容易理解bind了,call是改变函数的this然后立即执行,而bind是改变函数的this后并不执行。

      a.call(b,1) 类似于 (a.bind(b,1)())或者(a.bind(b,1))()。

      16、你何时优化自己的代码?

      普通的优化可能是在边写就边处理了,类似于少操作dom啊,多次用到的数据用变量存起来这样的,有些地方可能为了思路的不间断性,会先用普通方法实现了,然后回过头来再想更合适的方法来实现。

      17、在什么时候你会使用 document.write()

      一般在做打印页面预览的时候用到,var a = window.open();a.document.write('内容');

      

      js篇未完。。。

      

  • 相关阅读:
    zkw费用流
    luogu5212/bzoj2555 substring(后缀自动机+动态树)
    后缀数据结构模板2
    后缀数据结构模板1
    通用动态树(Link-Cut Tree)模板
    上下界网络流总结
    多项式多点求值
    拉格朗日反演
    多项式板子·新
    luogu2387 [NOI2014]魔法森林
  • 原文地址:https://www.cnblogs.com/xnn5566/p/4363350.html
Copyright © 2020-2023  润新知