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、描述以下变量的区别:null
,undefined
或 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篇未完。。。