阅读 73

js基础面试题整理

原型链

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)
复制代码
关注下面的标签,发现更多相似文章
评论