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