ES6笔记5

一、柯理化
示例:

function addNew(x){
			return function(y){
				return x+y;
			}
		}
		console.log(add(1,2));
	    console.log(addNew(2)(3));
		

二、防抖两种方式
示例:

var num = 1;
let times;
先执行
content.onmousemove = function (){
		let obj = times;
			clearTimeout(times);
			times = setTimeout(()=>{
				times = null;
			},1000)
			if(!obj){
			console.log(typeof !obj);
				content.innerHTML = num++;
			}
	};
	
后执行
content.onmousemove = function (){
			clearTimeout(times);
		times = setTimeout(()=>{
			content.innerHTML = num++;
			},1000)
		};


三、节流两种方式
示例:

延时器
		var time;
		content.onmousemove = function(){
			if(!time){
			time = setTimeout(()=>{
			time = null;
				content.innerHTML = num++;
				},1000)
			}
		时间戳
		var content = document.getElementById("content");
			var num = 1;
			var timeNew = 0;
			content.onmousemove = function(){
			var timeOld = Date.now();
			if(timeOld-timeNew>1000){
				timeNew = timeOld;
				content.innerHTML = num++;
					}
				}

四、闭包的特性
①函数嵌套函数
②函数内部可以引用函数外部的参数和变量
③参数和变量不会被垃圾回收机制回收
示例:

function a(){
			var name = "dov";
			return function(){
				return name;
			}
		}
		console.log(a()());
		var b = a();
		console.log(b());
		

1、闭包的好处:
①保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突
②在内存中维持一个变量,可以做缓存(但使用多了同时也是一项缺点,消耗内存)
③匿名自执行函数可以减少内存消耗。
2、闭包的坏处:
①其中一点上面已经有体现了,就是被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏,解决方法是可以在使用完变量后手动为它赋值为null;
②其次由于闭包涉及跨域访问,所以会导致性能损失,我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响。
示例:

for(var i=0;i<5;++i){
			(function(i){
				setTimeout(()=>{
					console.log(i);
				},1000*i)
			}(i))
		}
		console.log(1111111);
		console.log(222222);

五、JavaScript为什么是单线程
1.首先是历史原因,在创建 javascript 这门语言时,多进程多线程的架构并不流行,硬件支持并不好。
2.其次是因为多线程的复杂性,多线程操作需要加锁,编码的复杂性会增高。
3.而且,如果同时操作 DOM ,在多线程不加锁的情况下,最终会导致 DOM 渲染的结果不可预期。

六、什么是同步任务?什么是异步任务?
1、同步任务:在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务
2、异步:不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

1.JS任务 分为同步任务(synchronous)和异步任务(asynchronous)。
2.同步任务都在 JS引擎线程(主线程) 上执行,形成一个执行栈(call stack)。
3.事件触发线程 管理一个 任务队列(Task Queue)。
4.异步任务 触发条件达成,将 回调事件 放到任务队列(Task Queue)中。
5.执行栈中所有同步任务执行完毕,此时JS引擎线程空闲,系统会读取任务队列,将可运行的异步任务回调事件添加到执行栈中,开始执行。
示例:

console.log(1)
		setTimeout(()=>{
		    console.log(2)
		},100)
		console.log(3)

七、 Array.of()创建数组
示例:

var a = Array.of(1,2,3,"abc",undefined,{name:1},function aa(){});
		console.log(a);
		var b = [1,,2,3];
		var c = new Array(3,4,5);
		console.log(b);

八、Array.from(类数组,循环,改变this指向)
1、可选,map 函数,用于对每个元素进行处理,放入数组的是处理后的元素。
2、可选,用于指定 map 函数执行时的 this 对象。
示例:

var a = Array.from([1,,2,3,"abc",{name:1}]);
		console.log(a);
		var a = Array.from([1,2,3],function(item){
			return item*2;
		});
		var a = Array.from([1,2,3],(item)=>item*2);
		console.log(a);
		let obj = {
			do:(n)=>{
				return n*10;
			}
		}
		console.log(obj.do(4));
		var a = Array.from([1,2,3],function(item){
			return this.do(item);
		},obj);
		console.log(a);
		
		let map = new Map([[1,2,3]]);
		map.set('key0', 'value0');
		map.set('key1', 'value1');
		console.log(map);
		console.log(Array.from(map));
		let set = new Set([1,2,3]);
		set.add(10);
		set.add(11);
		console.log(set);
		console.log(Array.from(set));
		
		let str = "hello";
		console.log(Array.from(str));
		let set = new Set(str);
		console.log(set);

九、find()方法
1、查找数组中符合条件的元素,若有多个符合条件的元素,则返回第一个元素。
示例:

let arr = Array.of(1, 2, 3, 4);
		console.log(arr.find((item) => {
			return item>2;
		}));

2、 findIndex()查找的是拿元素值去查询下标,则返回第一个元素下标。
示例:

console.log(arr.findIndex((item) => item==4));

3、fill(填充的值,包含起始下标,不包含结束下标默认到最后)将一定范围索引的数组元素内容填充为单个指定的值。
示例:

 console.log(arr.fill(0,0,2));

4、copyWithin()将一定范围索引的数组元素修改为此数组另一指定范围索引的元素。
参数1:被修改的起始索引
参数2:被用来覆盖的数据的起始索引
参数3(可选):被用来覆盖的数据的结束索引,默认为数组末尾
示例:

console.log([1, 2, 3, 4,5,6,7,8,9].copyWithin(0,2,5));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值