一些简单的前端面试问题

第一篇

第一题

console.log(1+"2"+"2")//122
console.log(1+ +"2"+"2")//32
console.log("A"-"B"+"2")//NAN 2
console.log("A"-"B"+2)//NAN

第二题

 function add(m) {
            return function b(n) {
                return n + m++
            }
        }
        var add1 = add(070);
        var add2 = add(050);
        console.log(add1(010)); //64
        console.log(add2(010)); //48

第三题
如何判断一个数组与伪数组?
1.用console.log打印出来伪数组的__proto__不是Array
2.用Array.isArray()来判断是否为数组,如果是则返回ture,如果不是则返回false
3.使用数组属性的方法,如果不是数组,则会报错

第四题
call(改变作用域的this 的指向)与apply的区别?
call(this.obj,object)使用其自有的实参列表作为函数的参数。
apply(this.obj,[argArray])要求以数组的形式传入参数。
传参的数量,一个可以传两个参数,一个可以传多个

第五题
阐述一下css sprites及其优点(精灵图)
精灵图:就是将很多图标集成在一个图像上
优点:
1.减少图片字节
2.减少页面的http请求,提高了页面性能
3.解决了网页设计师在图片上,命名的困扰
缺点:
1.不方便后期维护
2.开发时需要测量,显得繁琐

第六题
什么是闭包?如何使用它?为什么使用它?
闭包:如果一个函数使用到了他的作用域外的变量,那么这个变量和这个函数之间的环境叫闭包。
用途:
1.模仿块级作用域:指在循环中的变量,一旦循环结束,变量也随之销毁,他的作用范围只有一小块
2.储存变量:节省每次访问时间
3.封装私有变量:外部无法引用我们能通过闭包的特点来访问私有变量

第七题
添加节点:appendchild()
移除节点:removechild()
替换节点:redplacechild()
插入节点:inserBefore()
查找:
getElementsByTagment()
getElementsByName()
getElementsById()
创建:
createDocumentFragment()
createElement()
creatTextNode()
复制:cloneNode()

第八题
什么是默认事件?什么是冒泡事件?如何禁止?
默认事件:用户某些动作后,标签自动发生的行为
取消默认事件:event.preventDefault()

冒泡事件:事件从事件目标(target)开始往上冒泡直到最上级标签
阻止冒泡事件:event.stoppropagation()

第九题
请写出异步加载的三个方法
1.defer(延迟脚本的执行)
2.async(规定脚本将被异步执行)
3.创建script,插入到DOM中,加载完毕后callBack

第十题
push()向数组尾部添加元素
unshift()向数组头部添加元素
pop()从数组尾部开始删除元素(一个)
shift()从数组头部开始删除元素(一个)

第十一题
如果一个ul下面有非常多的li,当我们想找到某一个特定的li时我们应该怎么办?(因为li数量太多,所以不能使用for循环,更不可能使用毛点,我们得使用事件委托)

 var ul=document.getElementsByTagName('ul')[0]
        ul.onclick=function(e){
            var event=e||window.event;
            var tar=event.target||event.srcElement;
            if(tar.tagName.toLowercase()==="li"){
                alert(tar.innerText);
            }
        }
        //toLowercase()将大写字符转化成小写
        //tagName()通过元素标签查找元素
        //event.target 发生事件的元素
        //event.srcElement 当前事件的源

第十二题
原型链的继承方式

Object.prototype.add=function(){
           console.log("hello word");
       }
       var obj={
           
       }
       obj.add();

第十三题
数组去重(原型链上编程)

 var arr=[1,2,3,5,8,4,8,4,6,8,4,3,1,1,3,2,1,5,1,6,1,8,6]
    Array.prototype.add=function(arr){
        var newarr=[];
        for(var i=0;i<arr.length;i++){
            if(arr.indexOf(arr[i])==i){
                newarr.push(arr[i])
            }
        }
        return newarr 
    }
    console.log(arr.add(arr));

第十四题
innerheight ,innerwidth在呈现的时候是否包含滚动条?

innerheight 返回窗口的文档显示区的高度。
innerwidth 返回窗口的文档显示区的宽度。
var w=window.innerWidth;
var h=window.innerHeight;
在菜鸟教程里:获取窗口的高度与宽度(不包含工具条与滚动条):
在w3c里面:包括(如果呈现的话)垂直滚动条
在MDN里面:浏览器窗口的视口(viewport)高度(以像素为单位);如果有水平滚动条,也包括滚动条高度
所以存在歧义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值