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篇未完。。。

  

posted @ 2015-03-24 17:02  Xnn再也不吃零食了  阅读(266)  评论(0编辑  收藏  举报