前端学习

一、css

1、什么是css盒模型?

html页面上的所有元素可以看成一个盒子

盒模型的类型:

    标准盒模型:margin+border+padding+content

    IE盒模型:margin+context(border+padding+content)

控制盒模型的模式:

    box-sizing:content-box(标准盒模型)/ border-box(IE盒模型)
2、css选择器的优先级?

css的特性有:继承性、层叠性、优先级

优先级:!important >行内样式 > id选择器 > 类(class选择器)> 标签选择器 > 全局选择器(*)

3、隐藏元素的方法有哪些?

display:none :元素在页面上消失,不占据空间

opacity:0 设置元素的透明度为0,元素不可见,占据空间

visibility:hidden 让元素消失,占据空间

position:absolute 从当前位置踢出

clip-path: 剪切

4、px和rem的区别?

px是像素,是绝对单位长度

rem是相对单位,相对于html根节点的font-size的值

5、重排(回流)和重绘有什么区别?

重排: 布局引擎会根据所有样式计算出盒模型在页面上的位置和大小

重绘:计算出盒模型在页上的位置和大小后,浏览器根据每个盒模型的特性进行绘制

重排一定会重绘

怎么触发重排和重绘?

删除、添加DOM元素,js修改DOM元素的位置和大小,修改内容,会触发重排。

修改颜色、文本、阴影会触发重绘

6、让一个元素水平垂直居中的方法有哪些?

定位+margin

定位+transform

flex布局

grid布局

table布局

7、css的哪些属性可以继承?哪些不可以继承?

css三大特性:继承、层叠、优先级

子元素可以继承父类元素的样式

字体的一些属性可以被继承:font
文本的一些属性:text
元素的可见性:visibility:hidden
表格布局的属性:border-spacing
列表的属性:list-style
页面的样式属性:page
声音的样式属性

8、有没有用过预处理器?

预处理语言增加了变量、函数、混入等强大的功能

SASS、LESS

SASS 定义变量 @

二、js

1、js由哪三部分组成?

ECMAScript:js的核心,描述了语言的基础语法,比如var,for,数据类型(数组,字符串)

文档对象模型(DOM):DOM把整个HTML页面规划为元素构成的文档

浏览器对象模型(BOM):对浏览器窗口进行访问和操作

2、js有哪些内置对象?

String、Boolean、Number、Array、Object、Function、Math、Date、RegExp…

Math

    abs(绝对值)、sqrt(开平方)、max(最大值)、min(最小值)等

Date

    new  Date()实例化一个对象   

    getFullYear()获取当年、getDate()获取当天日期、getDay()获取星期几(周日0 到 周六6)

Array

String

    concat()合并两个或多个数组,并返回一个新数组,原数组不会被修改

    length 获取数组的长度或者字符串的长度(即包含的字符个数)

    slice()返回一个新的数组或字符串,包含从开始到结束(不包括结束)选择的元素。它不会修改原数组或字符串,而是返回一个子集。

3、操作数组的方法 Array

push()、pop()、sort()、splice()、unshift()、shift、reverse()、concat()、join()、map()、filter()、ervery()、some()、reduce()、isArray()、findIndex()

哪些方法会改变数组?

push()、pop()、unshift()、shift、sort()、splice()、reverse()

具体的JavaScript数组理解

4、对数据类型的检测方式有哪些?

typeof()

instanceof()

constructor()

Object.prototype.toString.call()

//举例代码
<script>
		// typepf()   对于基本数据类型可用,引用数据类型不可用
		console.log(typeof 777) //number
		console.log(typeof [1,2,2])
		console.log(typeof 23.34)
		
		// instanceof()只能判断引用,不能判断基本
		console.log([] instanceof Array) 
		console.log('anc' instanceof String)
		
		// constructor() 基本上对于基本数据类型和引用数据类型可判断,特殊:声明一个构造函数,并把它的原型指向了Array
		console.log(('abc').constructor === String)
		
		// Object.prototype.toString.call()对于基本数据类型和引用数据类型可判断
		var opt = Object.prototype.toString
		console.log(opt.call(2))
		console.log(opt.call(false))
		console.log(opt.call('aaa'))
		console.log(opt.call([]))
		console.log(opt.call({}))
	</script>
5、什么是闭包,闭包有什么特点?

闭包:函数嵌套函数,内部函数被外部函数返回并保存下来时,就会产生闭包。

//产生闭包
	function fn(a){
		return function(){
			console.log(a)
		}
	}
	var b = fn("abcd")
	b()  //运行结果abcd
特点: 可以重复利用变量,并且这个变量不会污染全局的一种机制;
这个变量是一直保存在内存中,不会被垃圾回收机制回收

缺点:闭包比较多的时候,会消耗内存,导致页面的性能下降,
在IE浏览器中才会导致内存泄露
解决方法:手动删除变量,赋值为空

使用场景:防抖、节流、函数嵌套函数避免全局污染的时候

6、前端的内存泄露怎么理解?

js里已经分配内存地址的对象,但是由于长时间没有释放或者没办法清除,造成长期占用内存的现象,会让内存资大幅浪费,最终导致运行速度慢,甚至崩溃的情况。

js里的垃圾回收机制不能正常释放和回收,主要出现在IE浏览器

有哪些会导致内存泄露的因素:
1、一些为声明直接赋值的变量
2、一些未清空的定时器
3、过度的闭包
4、一些引用元素没有被清除

7、事件委托(事件代理)是什么?

原理:利用事件冒泡的机制来实现,就是把子元素的事件绑定到父元素的身上,如果子元素阻止了事件冒泡,委托不成立

阻止事件冒泡:event.stopPropagation()
addEventListener(‘click’,函数名,true/false) 默认是false(事件冒泡),true(事件捕获)

好处:提高性能,减少事件的绑定,也减少内存的占用

8、基本数据类型和引用数据类型的区别?

基本数据类型:String、Number、Boolean、undefined、null
基本数据类型保存在栈内存中,保存的是具体的值

引用数据类型():Object、Function、Array
保存在堆内存中,声明一个引用类型的变量,保存的是引用类型数据的地址
声明两个引用类型,同时指向一个地址,修改其中一个,另外一个也会改变

	const obj ={
		name:'张三',
		age:18
	}
	const obj1 = obj 
	obj1.name = '李四'
	console.log(obj) //结果 李四 ,18
	console.log(obj1) //结果 李四 ,18
9、说一下原型链

原型是什么:原型就是一个普通对象,是为构造函数实例共享属性和方法,所有中引用的原型都是同一个对象

	function Person(){
		this.say = function(){
			console.log('sd')
		}
	}
	var p1 = new Person()
	var p2 = new Person()
	
	p1.say();
	p2.say();
	//结果sd sd

使用prototype可以把方法挂在原型上,内存只保存一份
_ proto _可以理解为指针,实例对象中的属性,指向了构造函数的原型

10、new操作符具体做了什么?
	1、先创建了一个空对象
	2、把空对象和构造函数通过原型链进行链接
	3、把构造函数的this绑定到新的空对象身上
	4、根据构建函数返回的数据类型判断,如果是值类型,则返回对象,如果是引用类型,就要返回这个引用类型

	 function newFun(Fun,...args){
		 // 1、先创建了一个空对象
		 let newObj = {}
		 // 2、把空对象和构造函数通过原型链进行链接
		 newObj.__proto__ = Fun.prototype
		 // 3、把构造函数的this绑定到新的空对象身上
		 const result = Fun.apply(newObj,args)
		 // 4、根据构建函数返回的数据类型判断,如果是值类型,则返回对象,如果是引用类型,就要返回这个引用类型
		 return result instanceof Object ? result : newObj
	 }
	 
		 
	 function Person(name){
		 this.name = name
	 }
	 Person.prototype.say = function(){
		 console.log("12233")
	 }
	 const  p1 = newFun(Person,'李四')
	 p1.say() //12233
	 console.log(p1) //返回一个对象
11、JS是如何实现继承的?

js实现继承的方式具体代码实现
1、通过原型链继承

让一个构造函数的原型是另一个类型的实例,那么这个构造函数new出来的实例就具有该实例的属性

2、借用构造函数继承

在子类构造函数的内部调用父类的构造函数,使用apply()或call()方法将父对象的构造函数绑定到子对象上

3、组合式继承

将原型链和借用构造函数来实现对实例属性的继承.这样,既通过在原型上定义方法实现了函数复用, 又保证在每个实例都有自己的属性

4、ES6的class类继承

子类必须在constructor方法中调用super方法,因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象。

12、JS的设计原理是什么?

JS引擎
运行上下文:
调用栈:单线程
事件循环
回调

13、JS中关于this指向问题

1、全局中的this指向,指向的是window
2、全局作用域或普通函数中的this,指向全局window
3、this永远指向最后调用它的那个对象,在不是箭头函数的情况下
4、new关键词改变了this的指向
5、apply,call,bind可以改变this指向,不是箭头函数
6、箭头函数中的this,它的指向在定义时就已经确定了,箭头函数它没有this,要看外层是否有函数,有就是外层函数的this,没有就是window
7、匿名函数中的this,永远指向了window,匿名函数的执行环境具有全局性,因此this指向window

14、script标签里有async和defer有什么区别?

当没有async和defer这两个属性的时候,浏览器会立即加载并执行指定的脚本
有async时,加载和渲染后面元素的过程将和script的加载和执行并行进行(异步)(不会保证脚本的顺序,可能会出现空白页面)
有defer时,加载和渲染后面元素的过程将和script的加载并行进行(异步),但是执行时间要等所有元素解析完成之后才会执行(会保证脚本的顺序)

15、setTimeout最小执行时间是多少?

HTML5规定的内容:
setTimeout最小执行时间是4ms

setTimeout嵌套大于5个以上会自动有4个4ms的延时,js不能精确计时

setInterval最小执行时间是10ms,小于10ms会被跳转为10ms

浏览器不同、参照规则不同,时间可能会不同

16、ES6和ES5有什么区别

JS 组成:ECMAScript、DOM 、BOM
ES5(ECMAScript5):2009年的修订
ES6(ECMAScript6):2015年的修订,是JS下一个版本标准,用来解决ES5的不足

17、ES6的新特性?

1、新增块级作用域(let、const)
2、新增了定义类的语法糖(class)
3、新增了一种基本数据类型(symbol)
4、新增了解构赋值
5、新增了函数参数的默认值
6、给数组新增了API
7、对象和数组新增了扩展运算符
8、Promise
9、新增了模块化(import、export)
10、新增了set和map数据结构
11、新增了generator
12、新增了箭头函数

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安风\(`Δ’)/

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值