javascript知识点

1.js由哪三部分组成?

ECMAScript:JS的核心内容,描述了语言基础语法例如var ,for ,数据类型能。
文档对象模型(DOM):把真个HTML页面规划为元素构成的文档。
浏览器对象模型(BOM): 对浏览器进行操作和访问。

2.sj的内置对象。

Boolean Number Array Object Function Regexp
Math : abs();sqrt();max(); min();
Date :new Date();getYear();
String:concat();length;clice();split();

3.操作数组的方法。

会改变原数组的方法:push();pop();unshift();shift();foreach();reverse();sort();splice();
不会改变原数组:concat();join();map();filter();some();reduce();isArray();

4.js数据类型检测方法。

typeof():只能判断基本数据类型。
instanceof():只能判断引用数据类型。
constructor():通过构造器来判断数据类型。
Object.prototype.toString.call():完美的解决方案,通过构造函数的属性来判断类型。

5.什么是闭包。

闭包定义:函数嵌套函数,内部函数被外部函数返回并保存下来就会产生闭包。
特点:重复利用变量,并且不会污染全局的一种机制;这个变量一直保存在内存中,不会被垃圾回收机制回收。
缺点:对内存的消耗比较大,在IE中回导致内存泄漏。
使用场景:防抖节流,函数嵌套避免全局污染。

function fn(a){
	return function(){
		console.log(a)
	}
}
var fo = fn('abcd')

6.前端内存泄漏怎么理解?

JS里已经分配内存地址的对象,但是由于长时间没有释放或者没有办法释放,造成长期占用内存的现象,会让内存占用标高,最终导致运行速度慢,甚至崩溃的情况。
因素:一些没有声明就直接赋值的对象;一些没有清空的定时器;大量的闭包;引用没有被清理;

7.事件委托;

通过事件冒泡机子,把子元素的事件绑定到父元素的身上。

8.基本数据类型和应用数据类型的区别。

基本数据类型:string;number;boolean;undefined;null;
保存在栈内,保存一个具体值。
引用数据类型:ojbect function array
数据保存在堆中 ,栈中保存的是堆中的地址。

9.原型链。

原型(portotype):就是一个普通的对象,他是为构造函数的实例共享属性和方法;所有实例应用的原型都是同一个对象。
原型链(_prtot _):指向构造函数的原型。

10.new关键字做了什么事。

1.创建空对象。
2.把空对象的构造函数通过原型进行连接。
3.把构造函数的this绑定到新的空对象身上。
4.根据构造函数返回相对应的类型判断。

11.js如何实现继承。

1通过原型链继承。
2通过借用构造函数继承。
3组合式继承。
4es6的calss继承。

12.js的设计原理。

js引擎:把js代码编译成可执行的机器码。
运行上下文:浏览器可调用的API。
调用栈:单线运行。
事件循环:
回调:

13.this指向。

1.全局中this指向windos。
2.function(){}中的this指向调用者。
3.()=>{} 调用时的作用域。

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

没有async和defer的时候浏览器回立刻加载指定脚本 。
有async的时候加载元素的过程会和script并行。
有defer的时候加载元素的过程会和script并行,但是不会执行。

15.setTimeout最小的执行时间是多少。

HTML5规定
setTimeout:4ms;
setInterval:10ms;

16.es6和es5有什么区别?

ECMAScript修订的版本。

17.es6新特性。

1.新增加块级作用域(let ,const)
作用域为{} 存在暂时性死区的问题 不能再同一个作用域内重复声明 不存在变量提升
2.新增定义类的语法(class)
3.新增基本数据类型(symbol)
4.新增解构赋值
5.新增函数的参数的默认值
6.给新增数组API
7.对象和数组新增扩展运算符
8.promise
异步编程的一种方案绝了解决回调地狱。拥有all,reject,resolve,race方法,原型上有then,catch等方法,把异步操作队列化
三种状态:pending初始状态,fulfilled操作成功,rejected操作失败
async await同步代码异步操作
9.新增模块化(import,export)
10.新增set;map数据结构
11.新增generator
12.新增箭头函数
不能作为构造函数使用, 他没有arguments, this指向当前作用域, 不能用call,aply,bind改变this指向,

18.call,aply,bind的区别。

相同:都能改变this指向并调用。
call:形参传递参数列表。性能比aply好一点,call用的更多一点。
aply:行参为数组。
bind:传参不会立刻调用,会返回一个改变了this指向的函数。

19.递归。

如果一个函数可以调用自己本身,那么就是递归函数。
递归函数必须要有return。

20.如何实现深拷贝。

1.最简单的方法就是序列化。
2.使用(…)扩展运算符。
3.使用递归。

	function exten(origin,deep){
	let obj = {}
	if( origin instanceof Array ){
		obj = []
	}
	for(let key in origin ){
		let value = origin[key]
		obj[key] = (!!deep && typeof value === 'objecy'  && value !== null) ? exten(value,deep):value
	}
	return obj 
}

21.js事件循环。

主线程先执行同步任务,然后才去执行任务队列里的任务,如果在执行宏任务之前有微任务,那么要先执行微任务全部执行完之后等待主线程的调用,调用完之后再去任务队列中查看是否有异步任务

主线程=>微任务=>宏任务

22.promise的原理。

promise封装了一个异步操作,可以获取成功和失败的结果。
常用的方法。

/ 封装一个Ajax,相当于axios();
            function sendAjax(url) {
                return new Promise((resolve, reject) => {
                    //  1.创建对象
                    const xhr = new XMLHttpRequest();
                    xhr.responseType = 'json';
                    // 2.初始化设置请求方法(类型)和url
                    xhr.open("GET", "https://api.apiopen.top/getJoke");
                    // 3.发送
                    xhr.send();
                    // 4.绑定事件,onreadystatechange,存储函数(或函数名)处理响应结果(每当 readyState 改变时,就会触发 onreadystatechange 事件,一共会触发 4 次,从 0 到 4)
                    // readyState 属性存有 XMLHttpRequest 的状态信息
                    xhr.onreadystatechange = function() {
                        if (xhr.readyState === 4) {
                            if (xhr.status >= 200 && xhr.status < 300) {
                                resolve(xhr.response);
                            } else {
                                reject(xhr.status);
                            }
                        }
                    }
                })
            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值