前端面试题2021(JS篇(下))

1.用函数递归实现计算斐波那契数列第n位数据

function feibo(n){
    if(n<= 2) {
      return 1
  }
  return feibo(n-2) + feibo(n-1)
}

2.用函数的递归实现计算给定数值n的阶乘

fucntion jieCheng(n){
    if(n<=1) {
        return 1
  }
  return n*jieCheng(n-1)
}

3.JS代码实现一个账号、邮箱的验证

var reg = /^[1-9][0-9]{5,9}$/
var reg2 = /^[0-9a-zA-Z]{6,16}(@qq|@163)(\.com|\.cn|\.com\.cn)$/

4.简述什么是面向对象,面向对象有哪些优缺点

面向对象是一种编程思想,重点关注的是参与解决问题的对象以及对象的特征行为,通过对象的行为的互相调用完成最终问题的解决
优点:开发的软件扩展性好
缺点:开发的软件稳定性较差,需要配合相关的技术进行完善

5. 简述什么是面向过程,面向过程有什么优缺点

面向过程是一种编程思想,重点关注的的是解决问题的步骤和处理过程,代码中最直观的实现方式之一就是函数式编程,将操作步骤定义成函数,函数之间的相互调用就是执行过程
优点:开发的软件稳定性非常高
缺点:开发的软件扩展性较差,可以配合相关的开发模式来进行完善

6.简述call()和apply()有什么区别

call()和apply()都是用来改变函数的调用对象、调用过程中改变this指向
call()和apply()的区别在于传递参数的形式上,call()按照数据序列进行参数传递,apply()通过数组的方式进行参数传递

7.什么是数组深浅拷贝

数组的深浅拷贝本质上就是数组的复制,深拷贝直接复制拷贝数组所有的数据,并生成一个新的数组;浅拷贝就是拷贝数组在堆内存中的地址,不会生成新的数组,本质上就是多个变量指向相同的数组(引用赋值)

8.简述什么是DOM事件流,事件流的三个阶段分别是什么

DOM事件流就是一个完整的事件处理的过程,主要区分为三个不同的阶段:事件捕获、目标事件触发、事件冒泡

9.什么是事件委托,简述一个事件委托的基本实现步骤

事件委托就是将触发的事件委托给目标元素的父元素进行触发
首先要确认触发的目标事件,然后给目标元素的父元素委托目标事件的触发操作,当目标父元素触发事件时,检查目标父元素所有子元素,触发事件元素,通过标签名称或者标签属性匹配目标子元素,执行相关业务代码,最后触发事件元素,若没有匹配到目标子元素,不执行

10.面向对象语法中,获取原型prototype的方式有哪些

类型.prototype 对象._proto_

11.简述函数语法中,arguments和形式参数的关系

arguments是函数声明时的一个内建参数,可以接收函数在调用时传递的所有参数数据的特殊变量
形式参数是函数声明时候,放在函数声明后面括号中的变量,声明函数如果需要执行就需要接收这些参数数据
arguments是一个内建关键词,可以表示或者描述参数

12.请说明你对闭包的理解,闭包有什么特点,并写出一个简单的闭包代码

闭包本质上就是在函数的内部声明了另一个函数,通过闭包可以扩展外部函数中局部变量的作用域范围,让外部函数中的局部变量避免了变量全局污染的问题,缺点在于如果不处理好闭包中内部函数的引用问题,很容易造成外部函数常驻内存,导致内存泄露

function outer() {
    var a = 0
    function inner() {
          console.log('外层函数变量',index)
    }
    return inner
 }

13.简述你对this对象的理解

全局函数,this指向window,事件属性上绑定的函数,this指向事件触发的标签对象,JSON对象中的函数,this指向当前对象,计时器中的函数,this指向window,构造函数中,this指向当前构造函数创建的对象,call ()、apply()可以改变函数调用时this的指向

14.编写程序代码,实现数组中重复数据的剔除功能

function trim(arr)  {
    var newArr == []
      for(var i=0;i<arr.length;i++) {
        if(!newArr.includes(arr[i])) {
          newArr[i].push(arr[i])
}
}
}

15.编写一个程序代码,实现一个div的鼠标拖动效果

    var box = document.querySelector('#box')

        function drag(ele) {
            ele.mousedown = function(e) {
                var event = window.event || e
                var ox = event.offsetX
                var oy = event.offsetY
                document.onmousemve = function(e) {
                    var event = window.event || e
                    var cx = event.clientX
                    var xy = event.clientY
                    box.style.left = cx - ox + 'px'
                    box.style.top = cy-oy + 'px'
                }
            }
            ele.onmouseup = function() {
                document.onmousemove = null
            }
        }

16.编写代码 ,实现一个选择排序算法对数组进行排序

 function sort(arr) {
            for (var i = 0; i < arr.length; i++) {
                for (var j = i + 1; j < arr.length; j++) {
                    if (arr[i] > arr[j]) {
                        var temp = arr[i]
                        arr[i] = arr[j]
                        arr[j] = temp
                    }
                }
            }
        }

17.jQuery和JavaScript之间的关系(BC)

A.jQuery就是高级JavaScript,是JavaScript的升级版
B.jQuery只是通过封装Javascript代码实现了一些功能的函数
C.JavaScript是一种编程语言,jQuery是一个JavaScript函数库
D.JavaScript是一种编程语言,jQuery也是一种新的编程语言

18.下面说法错的是(AD)

A window.onload 事件需要等待网页文档结构加载完成后执行
B window.onload 事件需要等待页面资源结构加载完成后执行
C $(function(){})需要等待网页文档结构加载完成后执行
D $(function(){})需要等到页面资源结构加载完成后执行

19.jQuery中的文档加载函数描述正确的是(BC)

A $(window).ready(fn)
B $(document).ready(fn)
C $(function(){})
D $.ready(function(){})

20.$('div')选择器描述正确的是(AC)

A 选择当前网页中所有div标签
B 选择当前网页中所有div标签并返回DOM对象
C 选择当前网页所有div标签并返回jQuery对象
D 选择当前网页最外层div标签并返回jQuery对象

21.$(:input)选择器描述正确的是(D)

A 选择页面中所有标签名称为input的标签
B 选择页面中id=‘input’ 的所有标签
C 选择页面中class='input'的所有标签
D 选择页面中input/select/textarea/button等所有表单标签

22.window.onload和$(document).ready(fn)的联系和区别

联系:它们都是等待网页数据加载后才执行对应代码的事件函数
区别:window.onload 在一个网页结构中只能出现一次,出现多次只有最后一次生效,该函数必须等到当前网页中DOM结构和资源数据全部加载后才能执行,没有缩写格式;$(document).ready(fn)在一个网页结构中可以出现多次,等待网页中的DOM结构加载完成后立即执行,包含自己的缩写格式如$().ready(function(){})$(function(){})

23.简述jQuery中常见的选择器函数、属性操作函数、样式操作函数、内容操作函数

选择器函数:用于使用css类似语法选择器选择网页标签的函数
$('#id'): id选择器
$('.class') 类选择器
$('tag') 标签选择器
$('ti,t2') 群组选择器
$(' ul li') 后代选择器
$('p>c') 子代选择器
$('s:first') 伪类选择器
$('s[arrt]') 属性选择器
$(':input') 表单选择器
属性操作函数:操作节点或者标签属性
$(selector).attr(attrName) 获取标签属性值
$(selector).attr(attrName,attrvalue)设置标签属性值
$(selector).prop(propName) 获取节点属性值
$(selector).prop(propName,propValue)设置节点属性值
样式操作函数
$(selector).css(className,classValue) 给节点设置单个样式
$(selector).css({cname1:cvalue1,cname2:cvalue2}) 给节点设置多个样式
$(selector).css(name)获取节点样式
内容操作函数
$(selector).text()/html() 获取闭合标签内容数据
$(selector).val() 获取表单元素数据
$(selector).text(dat)/html(dat) 设置闭合标签内容数据
$(selector).val(dat) 设置表单元素数据

24.使用jQuery实现一个选项卡效果

  $(function() {
            $('li').click(function() {
                var $index = $('li').index(this)
                $('p').css('display', 'none')
                $('p').eq($index).css('display', 'block')
            })
        })

25.简述$(selector).prop(name,value)$(selector).attr(name,value)的联系和区别

prop()和attr() 都是用来操作标签对象的属性的
attr()主要用于操作标签固有的DOM属性,如id、class
prop()主要用于操作标签固有的节点属性,如nodeName
在有些标签内中会有属性值是布尔类型的属性,该属性的操作推荐使用prop()进行处理

26.jQuery对象和DOM对象如何互相转换

DOM对象转换为jQuery对象
$(DOM对象)
jQuery对象转换为DOM对象
jQuery[索引]

27.jQuery中有事件冒泡吗,若有,应该如何阻止

有 event.stopPropagation()

28.简述jQuery中有那些插入节点的方法

append()/appendTo()
prepend()/prependTo()
after()/insertAfter()
before()/insertBefore()

29.简述jQuery中$(this)和this 的区别

$(this)是当前操作对象的jQuery对象
this是当前操作对象的DOM对象

30.jQuery中 $ 符号是什么意思

符号是一个函数名称,指代jQuery的意思,\()等价于jQuery()

31.如何使用jQuery来给一个元素添加 和删除class属性

$(selector).addClass(cllssName)
$(selector).removeClass(className)

32.使用document.getElementById()和$(#id)哪种方式效率更高

document.getElementById()是原生js语法,直接调用JS引擎完成数据处理,效率更高。$(‘#div’)是jQuery对原生js的封装提供的函数,首先调用JS代码,然后调用JS引擎
尽管原生JS的语法效率更高,但是相比较浏览器解释和处理网页代码的特效和速度,JS和jQuery处理数据的性能差异并不是很大, 所以在开发的时候为了提高开发效率推荐使用jQuery完成特效开发

33.jQuery有几种事件绑定的函数,它们各自有什么区别

jQuery提供了事件快捷绑定、bind()绑定、delegate() 绑定以及on()绑定,在操作过程中如果是页面已有元素添加事件,一般使用on()进行事件绑定处理;bind()/live()/delegate()事件绑定函数都是在jQuery发展过程中能出现的一些有局限性的操作函数,官方代码已经声明废弃或者即将废弃

34.简述one()和trigger()函数它们的作用

one()是jQuery语法中提供的一种绑定一次性事件的函数
trigger()是jQuery语法中提供的一种事件增强函数,一般和事件函数一起使用,支持指定事件触发的同时给事件函数传递自定义参数

35.使用jQuer实现一个全选效果

$(funtion(){
  $('#all').click(function(){
      $('.item').prop('checked',this.checked)
})
})

36.jQuery中的$.each()是什么函数,为什么要使用它

$.each()是jQuery封装的一个用于节点遍历的函数,jQuery选择器在操作节点时本身就具备隐式遍历的操作,但是如果要对节点进行个性化操作的话就需要执行遍历的处理,jQuery提供的each()函数优化普通遍历的语法

37.jQuery中如何将一个HTML节点插入DOM树中

after()/insertAfter()/before()/insertBefore()
append()/appendTo()/prepend()/prependTo()
html()

38.jQuery语法中$.map()和原生JS数组的map()函数有什么不同

map()函数主要用于遍历数据并对遍历的数据进行数据转换处理
原生js代码中,只有数组具备map()操作,其他类4数组无法使用map() 进行数据映射转换
jQuery中对原生js语法中的map()进行了封装,可以支持数组以及类数组执行map()映射转化操作

39.谈谈你对jQuery的理解

jQuery对原生JS进行了封装,提供了大量的功能函数,提高了网页效果开发效率
jQuery提供了强大的选择器用于选择目标标签
jQuery提供了内建的动画函数,提供基础动画特效
jQuery封装了大量DOM函数,提高DOM操作开发效率
jQuery提供了隐式迭代功能,方便对批量节点进行处理
jQuery提供了大量插件,可以快速实现特定的网页效果
jQuery有自己丰富的第三方社区提供了大量网页效果的插件支持

40.简述你用过的jQuery中的动画函数

hide()/show()/toggle() 隐藏、显示、切换
slideUp()/slideDown()/slideToggle()
fadeOut()/fadeIn()/fadeTo()/fadeToggle()
animate()

41.什么是JSON,都包含那些常见操作

JSON是原生JS语法中使用花括号包含起来的key :value键值对的一种数据,用于描述单个复杂对象的,经常用于前后端数据交互时数据的传输
JSON对象转换为JSON字符串: JOSN.stringfy()
JSON字符串解析成JSON对象:JSON.parse()

42.简述原生JS和jQuery中事件绑定方式以及它们的区别

原生JS存在兼容性问题
ele.addEventListener() || ele.attachEvent()
jQuery提倡使用on()绑定事件
jqObj.on(eventType,fn)

43.jQuery如何给一个元素添加多个单击事件,如何取消其中某个单击事件

传统的添加和取消:满足大部分场景
jqObj.on('click',fn) jqObj.on('click',fn2) 添加
jqObj.off('click',fn) 取消对应的单击事件
如果一个函数多次绑定,可以使用事件命名空间来绑定
jqObj.on('click.a',fn) jqObj.on('click.b',fn) 添加
jqObj.off('click.a',fn) 取消对应的单击事件

44.简述什么是深浅拷贝,深浅拷贝有哪些实现方式

浅拷贝就是拷贝数据对象在内存中的地址,深拷贝就是拷贝数据对象在堆内存中的数据
深拷贝的实现方式可以通过普通循环创建新对象的方式实现,也可以使用$.extend()进行深拷贝

45.什么是原型,什么是原型链,什么是构造函数,它们之间有什么联系

原型:原生JS中某个构造函数所属类型的真实对象
原型链:原生JS中某个对象所属类型真实对象
构造函数: 原生JS中模拟面向对象中类型的一个函数

构造函数就是原生JS中声明的一个函数,用来模拟一个类型,可以使用构造函数通过new关键字创建对象;构造函数的本质上是一个函数,所以它的原型链__proto__属性是Function.prototype;构造函数是一个模拟类型创建对象,所以它的原型prototype属性是构造函数.prototype
原型,本质上是一个对象,用来描述某个真实类型,所以它的原型链__proto__属性指向的是继承的父类型的原型对象,如果没有继承关系,默认指向对象Object.prototype;原型作为一个对象没有上级原型prototype属性对象
原型链本质上是JavaScript管理数据的一套继承体系,在对象中通过__proto__属性描述,一般原型对象的原型链属性__proto__指向的就是创建当前对象的真实原型对象,可以通过原型链一直追溯到Object.prototype,JS中就可以通过原型链管理脚本中出现的所有数据对象

46.简述面向过程和面向对象的联系和区别

面向过程和面向对象都是编程思想,都是解决问题的思路
面向过程编程注重解决问题的过程和步骤,最直观的实现方式就是函数式编程,它的优点是开发的软件稳定性(耦合度)非常高,缺点是由于耦合度较高导致项目功能的扩展性较差
面向对象编程注重解决问题是参与的对象以及对象的行为,通过对象的行为之间的互相调用/协作完成最终问题的解决,最直观的实现方式就是类和对象,它的优点式开发的软件功能扩展性较好,缺点式开发的软件功能的稳定性较差

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容