JS面试
JS面试题收集
1、’undefined’变量和’undeclared’变量分别指什么?
一个定义为赋值,一个直接为定义;或者说你可以将undeclared看做是not a defined
2、闭包是什么,如何使用它,为什么要使用它?
闭包就是指在函数内部创建的函数,可以包含外部函数的作用域,使用它主要是使外部可以访问到函数内部的作用域
3、请解释什么是Javascript的模块模式,并举出实用实例?
利用闭包的模式封装私有变量的方法就叫做模块模式,比如在多人开发时,为了避免重名问题,就可以使用一个全局对象的方式封装所以得变量和函数,将变量和函数变为私有,从而避免重名
4、Function.prototype.bind和apply以及call区别?
(1)apply和call是调用同一个函数,改变函数内部的this,而bind则是创建一个新的函数,新的函数的内部this被改变,或者说apply和call是用来调用函数的方法,而bind是用来创建新函数的方法,需要调用时,还需调用,而apply和call则不需要
(2)apply和call的区别,apply()方法接受的是一个包含多个参数的数组,而call()方法接受的是若干个参数的列表
(3)apply和call返回结果包括指定的this值和参数,换句话说就是讲apply与call中的参数输入到fun.apply()中的fun中,然后将fun函数的运行值返回给this值的作用域中,但是这不是说会新创建一个函数,而是在原this的作用域中返回一份fun函数中的属性或值到此作用域中(需要2个作用域),和bind的返回由指定的this值和初始化参数改造的原函数拷贝即(新创建的函数)还是有区别的
(4)Array.prototype.slice.call(arguments)的理解: 根据规范slice可以用来将一个类数组转化为数组,只要将其方法绑定到这个对象中,绑定对象可以使用call和apply,而此处的Array.prototype则是因为arguments不能直接调用slice方法,所以可以通过[ ].slice方法调用slice方法,然后通过.call(arguments)的方法来将this绑定到arguments对象,使arguments形成一个新的数组,在调用slice方法返回一个提取了元素的新数组(默认从索引0到结束),此处使用Array.prototype则省去了我们初始化一个数组,提高效率

5、你对原型的理解?
每个对象都有一个私有属性([[Prototype]]),它有一个连接到另一个称为其prototype对象的链接,而这个prototype对象就是它的原型,obj._proto_可以用来表示原型,使用object.create(o)时,
obj._proto_== o;newobj = new Object()时,newobj._proto_ ==obj.prototype
浙公网安备 33010602011771号