本文共 1675 字,大约阅读时间需要 5 分钟。
1.js的基本类型有哪些?引用类型有哪些?null和undefined的区别。
基础类型:number,null,regex,string,boolean 引用类型 : object,function,array null是数据类型,undefined未定义
2.如何判断一个变量是Array类型?
array:Object.prototype.toString.call(obj) [object Array]
3.引用类型和基本类型的区别
引用类型:堆内存,是二级缓存,保存一个指针,指向另一个内存,如果程序不结束或者没有手动释放,则不释放 基本类型:栈内存,是一级缓存,由系统分配或者释放。
4.事件委托(手写例子)
5.对闭包的理解,闭包的优缺点?
闭包:一个可以让外部访问的函数。消耗内存
6.改变this的几种方法?
call , apply , bind
7.显式和隐式原型
显式原型:prototype , Function是一个Object,Function有一个属性prototype,它是一个指针,指向一个对象。这个对象有construsctor属性 隐式原型:_proto_ ,指向创建这个对象的函数的prototype,一个指针指向一个对象。
8.创建对象的多种方式
//字面量var obj = {name:'test'}//构造函数var obj = new Object({name:''})
9.实现继承的多种方式和优缺点
//原型链function Parent(){ this.name='' }function Son(){}Son.prototype = new Parent()//创建新对象var son = Object.create(new Parent())//call,applyfunction Son(){ Parent.call(this,'')} //es6 class Son extends Person{}
10.变量提升
var value = 1; var test = function(){ console.log(value) var value = 2; } test() function test(){ console.log(value+1) } test(); // undefined , undefined
11.匿名函数
(function(){ alert('test')})()
12.NaN != NaN,false != null
13.new 一个对象的过程
function ClassName (option){ console.log(option) }ClassName.prototype.say=function(){}let obj = new ClassName({})1.创建一个对象,传入原型 lo = Object.create(ClassName.prototype) 2.执行当前函数,并且this执行 newObj = ClassName.call(o)3. 返回新的对象 newObj
14.实现一个bing函数
//bings函数Function.prototype.binds = function () { var args = [].slice.call(arguments,1),target = arguments[0] return this.apply(target,args)}function tesa(a,b) { console.log(this,a+b) return a+b}console.log(tesa.binds({a:1},1,2))
转载地址:http://uflfo.baihongyu.com/