基础+函数式+基于原型的对象+集合+js单线程执行模型+js在服务器端运行-------------------------js的学习要点
基础
函数: 函数回调+闭包+作用域+生成器generator函数+promise,,,,,js是一门函数式语言,可怕
对象: 基于原型的面向对象(java是基于类的面向对象)+代理(控制对象的访问)
集合: 数组+map+set
js函数式语言+基于原型的面向对象+单线程执行模型
函数==对象-------->函数式编程
把函数作为第一类对象是函数式编程的第一步
把javascript看做函数式语言就能书写复杂代码
我一直觉得js的函数超级恶心,因为他无序,出现位置随意,使用位置灵活,相比我的java他就特别乱,
今天在这本书中看到一句话----------------
你会发现,在需要调用某函数的位置定义该函数,能让我们编写更紧凑更易懂的代码,恶心,乱,慢慢习惯。。。。。。。。
js是一门函数式语言,这样你就知道函数在js有多重要了吧,。。。。。
在js中,函数是一等公民,是一级对象,
函数与其他对象共存,函数的使用方法和对象的使用方法一样。
在js中,函数的使用特别灵活,函数可以通过字面量创建,可以赋值给变量,可以作为函数参数进行传递,可以作为返回值从函数中返回,
函数聚焦重点:
生成器:是函数,这种函数可以基于一次请求生成多次值的函数,generator函数---处理异步代码
promise:让我们更好的控制异步代码
(一)js的基本执行块----函数?
java是以类为执行的块的,而js是以函数,js一门函数式语言,因此我们说函数实际上就很核心,还有js封装的基于原型的对象,
函数!
(二)函数是第一级对象?
虽然讲js是函数式编程,但是你也不得不讲,这种函数式编程和我们的c、c++还是不一样的,他们的模块就是函数,而js的函数是真的nb,人家是对象类的函数,也就是说我之前学的c,java都没白学哈,什么面相过程,面向对象,我们在js这门语言中都有了哈,嘻嘻,
所以以后就要接触努力的弄懂这门变态语言,中性语言,js,同时具备函数过程,同时具备对象,(⊙o⊙)…
所以呢,在js中函数是这样的,函数是函数,但是函数是一种高级的对象,因此函数具有对象的一切特性
对象的一般使用
对象通过字面量来创建,
对象可以赋值给变量,数组xiang,或其他对象的属性
对象可以作为参数传递
对象可以作为函数的返回值
既然函数拥有对象的所有能力,那么我们看看函数是怎样实现的他这些对象的能力?
(1)对象通过字面量来创建
function fun(){}
(2)对象可以赋值给变量,数组xiang,或其他对象的属性
var a=function(){}
array.push(function(){});
duixaing.data=function(){}
(3)对象可以作为参数传递
function call(fun){
fun();
}
(4)对象可以作为函数的返回值
function call(){
return function(){}
}
(三)回调函数
回调函数 ,听着高大上,实际也就是我们建立的函数会被其他函数在稍后的某个时间点再回来调用
(四)函数?对象?
我们知道对象可以存储在集合中,函数拥有对象的一切能力,那函数也可以作为对象存储在集合中,,war,
var a=function(){};
a.type="koa";创建新的函数并且为其分配一个新的属性type
(五)函数集合,对象集合,存储一下函数?
当我们需要管理某个事件发生后,这个事件需要调用的回调函数集合,我们需要管理某个事件的回调函数的集合,由于函数是对象,因此我们可以将所有的函数放在一个集合中,便于管理,
注意,存储函数时,我们无论通过什么处理都要注意一点------------函数必须唯一,防止回调函数被多次调用,
(六)记忆函数
实际就是函数调用时寻找之前调用所得到的值。是一种缓存
(七)函数定义
一类对象,函数是可以用在编程语言中的值
a函数声明+函数表达式 function fun(){} + return function(){},一个是独立声明另一个是用于表达式中作为值使用,作为对象使用
函数声明是通过函数名进行调用,函数表达式是通过表达式进行调用
b箭头函数----es6,简洁,lambda函数 fun=>a,b,是函数表达式的简化版,省略function和{}和return(参数列表)=>{返回值}
c生成器函数----es6,
d函数构造函数---使用字符串形式动态创建构造一个函数new Function('a','b','return a+b')
函数的形参和实参:
形参是我们定义函数时所列举的变量
实参是我们调用函数时所传递给函数的值
(八)剩余参数+默认参数?
剩余参数:实参中比形参多余的参数
默认参数:js不支持函数重载,函数调用时,若梅传入参数,默认参数可以给函数提供缺省的参数值
都已加入es6的标准