原型链
1.如何判断一个变量是数组类型?
使用 instanceof 进行判断,typeof 是无法判断是否是数组的
var arr = [];
arr instanceof Array // ture
typeof arr // Object
2.写一个原型链继承的例子
方便理解的原型
// 动物
function Animal(){
this.eat = function(){
console.log('animal eat')
}
}
// 狗
function Dog(){
this.bark = function(){
console.log('dog bark')
}
}
Dog.prototype = new Animal()
// 二哈
var erha = new Dog()
面试时需要写下面的例子(贴近开发)
function Elem(id){
this.elem = document.getElementById(id)
}
Elem.Prototype.html = function(val){
var elem = this.elem
if(val){
elem.innerHTML = val
retuen this
}else{
return elem.indexHTML
}
}
Elem.prototype.on = function (type, fn){
var elem = this.elem
elem.addEventListener(type, fn)
}
3.描述new一个对象的过程
- 创建一个新对象
- this指向这个新对象
- 执行代码,即对this赋值
- 返回this
作用域和闭包
1.下面代码执行之后打印的结果
function F1(){
var a = 100
return function(){
console.log(a)
}
}
var f1 = F1();
var a = 200
f1()
答案:100(父集作用域是定义的时候的作用域,不是执行的时候的作用域)
2.说一下变量提升的理解
- 变量定义
- 函数声明会提前
3.说明this几种不用的使用场景
- 作为构造函数执行
- 作为对象属性执行
- 作为普通函数执行
- call apply bind
4.创建10个a标签 点击的时候弹出对应的序号
for(var i = 0; i< 10; i++){
var a = document.createElement('a');
a.innerHTML = i + '<br />';
(function(i){
a.addEventListener('click',function(e){
alert(i)
})
})(i)
document.body.appendChild(a)
}
5.如何理解作用域
- 自由变量,即全局变量和局部变量
- 作用域链,即自由变量的查找
6.闭包的作用
- 就是可以读取自身函数外部的变量(沿着作用域链寻找)
- 就是让这些外部变量始终保存在内存中 (外部无法访问闭包里面的变量)
异步和单线程
1.使用异步的场景
- 定时任务:setTimeout 、 setInverval
- 网路请求:ajax请求、动态 img 加载
- 事件绑定
2.同步和异步的区别是什么
- 同步会阻塞代码执行,而异步不会
- alert是同步,setTimeout 是异步
数组
1.常用的数组API
- forEach 遍历所以原生
- every 判断所以元素是否都符合条件
- some 判断是否有至少一个元素符合条件
- fort 排序
- mao 对元素重新组装,生成新数组
- filter 过滤符合条件的元素
2.使用forEach遍历一个对象
var obj = {
a:'1',
b:'2',
c:'3'
}
Object.keys(obj).forEach(function(val){
// val 是obj对象中的每一个key
//obj[val] 是 val对应的值
console.log(val,obj[val])
})
Math对象
1.获取一个长度一直为10位的随机数
var random = Math.random()
random = random + '0000000000'
candom = random.slece(0,10)