zoukankan      html  css  js  c++  java
  • 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篇未完。。。

      

  • 相关阅读:
    C++学习9 this指针详解
    福建省第八届 Triangles
    UVA 11584 Partitioning by Palindromes
    POJ 2752 Seek the Name, Seek the Fame
    UVA 11437 Triangle Fun
    UVA 11488 Hyper Prefix Sets (字典树)
    HDU 2988 Dark roads(kruskal模板题)
    HDU 1385 Minimum Transport Cost
    HDU 2112 HDU Today
    HDU 1548 A strange lift(最短路&&bfs)
  • 原文地址:https://www.cnblogs.com/xnn5566/p/4363350.html
Copyright © 2011-2022 走看看