阿巴

85 阅读4分钟

ES6 系列之箭头函数

  1. 箭头函数没有参数时,使用小刮号代表参数部分
原始写法:
var test = function() {
     console.log(111);
   }
test()

箭头函数写法:
var test = () => {
console.log(111);
}
test()

2.当函数只有一个参数时,可以省略小括号,直接写参数

原始写法:
var test = function(a) {
     console.log(a);
   }
test(1)

箭头函数写法:
var test = a => {
console.log(a);
}
test(1)

3.当参数有多个时,需要加上小括号:

原始写法:
var test = function(a,b) {
     console.log(a+b);
   }
test(1,2)

箭头函数写法:
var test = (a,b) => {
console.log(a+b);
}
test(1,2)


4.当函数体只有一条语句时,可以不加花括号,直接将这条语句写在箭头后面即可.


原始写法:
var test = function() {
     console.log(111);
   }
test()

箭头函数写法:
var test = () => console.log(111);
test()

5.如果函数体是要return数据的话,可以直接去掉大括号和return,直接写那个值value即可。在箭头函数执行时,会自动将其作为返回值返回。


原始写法:
var test = function(a,b) {
     return a+b
   }
test(1,2)

箭头函数写法:
var test = (a,b) => a+b
test(1,2)

JavaScript中的同步与异步

同步

由于js是单线程的,换句话说,就是,在同一段时间内,只能处理一个任务,干一件事情,然后再去处理下一个任务,浏览器解析网页中的js代码,是逐行进行读取,从上至下执行的 实例场景:打电话就是一个同步的例子,必须等待打完了一个,然后再接着打下一个的 在如何看待同步之前,有必要了解下计算机中两个专业术语概念,就是进程和线程 进程: 它是系统进行资源分配和调度的一个独立单位,具有一定独立功能的程序关于某个数据集合上的一次运行活动,可以粗俗的理解为主(大)任务 线程: 安排CPU执行的最小单位,可以理解为子任务 关系: 线程可以视作为进程的子集,一个进程可以有多个线程并发执行 区别:进程和线程的主要差别在于,它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。

异步

浏览器是多线程的,但解析我们的js代码,却是单线程的,但有些任务是需要消耗时间的(比如:上传,读取文件,下载等),如果按照普通的同步方式,就会阻塞我们的代码,主线程的任务没有做完,那么下面的任务将不会执行 实例场景:给女票打电话,必须等待到对方接听,有反应后,才能继续后面的热恋,你得一直等待,干不了别的事情,在那苦等的耗着 但发短信,微信就是一个异步的例子,也许对方正忙,没有及时回复,你不必等待对方及时回应,你仍可以继续干其他的事情。等到对方看见了,便会回应你. 单线程中有一些任务需要耗费一些时间,让用户去等待确认,把一些耗时的事情任务通过新开的线程方式来实现,浏览器会针对对于那些耗时间的任务,会开一些新的进程单独去处理 主线程继续往下走,那么这个时候,它既不影响后续代码的执行,同时还能通过另外的线程去做事,然后等待另外的线程做完事之后 比如说:通过回调,事件的方式去通知我们的主线程,然后把Ajax等异步处理要做的事情,在推到主线程当中进行执行 那有哪些东西是需要重新开线程的?既然js是单线程的,那么他是如何是实现异步操作的?我们把这些任务称为:异步任务 同一段时间内可以做多个任务,

return,break,continue的区别是什么

return 必须写在函数内部,遇到return后函数内部剩余的代码不再执行,直接返回;还可以使用return返回一个值给外面使用 break 跳出循环,剩余的循环不再执行 continue 跳出本次循环,剩余的循环继续执行

原型的概念

JavaScript的所有对象中都包含了一个 [proto] 内部属性,这个属性所对应的就是自身的原型JavaScript的函数对象,除了原型 [proto] 之外,还有 prototype 属性,当函数对象作为构造函数创建实例时,该 prototype 属性值将被作为实例对象的原型 [proto]

var和let的区别有哪些

1.可以用var对同一个变量重复声明,但是let不可以 2.var有变量提升,可以先赋值,后声明。let没有变量提升,只能先声明,后赋值 3.let声明的变量 有块级作用域