什么是函数?
定义:可重复使用的代码片段
四要素:function,函数名,变量,return
创建函数:(1)函数直接量:函数标识符funtion(){...}(2)let 变量=函数标识符(){...}
调用函数:(1)作为函数(2)作为方法(3)作为构造函数(4)通过call和apply
return:函数结束语句(如果函数中存在this且没有return,this为当前值,否则,this遵循this原则)。
分类:无参函数,有参函数,箭头函数,匿名函数,回调函数,返回值函数(普通函数),无返值回函数
备注:函数即对象
什么是匿名函数?
定义:没有名称的叫做匿名函数
匿名函数自调用:(function(){...})()
什么是箭头函数?
定义:匿名函数的简写?
三要素:括号,箭头,花括号,即()=>{}
箭头函数要点:(1)如果只有一个参数可以省略括号(2)如果只有一条语句可以省略括号(3)如果一条语句只剩return则必须省略return
箭头函数与this:箭头函数的this可以与函数外的this保持一致
箭头函数与普通函数区别:箭头函数无法修改this的指向,普通函数可以通过call,apply,bind修改this指向
什么是回调函数(callback)
定义:将函数以参数的形式传递叫做回调函数
两要素:2个函数,将第一个参数的函数名作为参数传递给第二个函数
什么是闭包?
定义:调用外层函数,外层函数作用域被要返回内层函数引用就形成闭包。
三要素:外层函数,外层函数作用域,要返回的内层函数。
为什么:没有要返回的内层函数,外层函数无法释放。因为多占用用一块内存所以要释放
意义:避免全局污染
要点:(1)内层函数的形参是外层函数的函数名(2)外层函数没有形参
调用:(1)在对象中匿名函数自调(2)在对象中:第一步、let 自定义函数名=对象.属性名(),第二步、调用自定义函数名(3)普通调用第一步、let 自定义函数名=函数名(),第二步、调用自定义函数名
什么是作用域
定义:一个变量的可用范围
分类:全局作用域,函数作用域
什么是作用域链
定义:一个函数所有作用域的链式结构
什么是promise
JS的执行顺序是:同步->异步->回调
promise:解决了回调解决异步的(callback)的方法,即promise是一个异步操作并抛出异常的方法
promise状态:padding(挂起),fulfilled(成功),reject(出错),all(一次执行),race(速度)
await-async:async用于申明一个函数的是异步的,await强制把异步变成同步,其他简写形
式:await/async,async,await
同步(sync):在进程中任务未结束时需要等待结束后才能执行下一个
异步(async):在进程中任务未结束但在等待的过程中可先执行下一个任务,例如:定时器,DOM操作,AJAX均属于异步
单线程:所有任务由一个线程完成
多线程:多个任务可分配给不同的线程完成
进程和线程区别:进程:一次执行,独有内存空间;线程:进程中独立执行单元,CPU的最小单元;进程包含线程。
promise和await/async区别:按顺序调用多个异步函数时的写法和报错获取
try{代码块}catch(错误){异常(失败)}与.then(成功,失败).catch(失败(异常))区别:.then有两个参数采用就近原则,如果存在一个参数,成功交给第一个参数,失败(异常)交给catch,如果存在两个参数错误会直接交给第二个参数不会交给catch;try{代码块}catch(错误){异常}可以通过catch将错误打印出来,而try执行正常代码。
什么是面向对象
定义:一个事物,多个功能,多个属性
什么是对象
定义:一组属性和方法的集合
创建对象:(1)对象直接量(2)Object.create()(3)let 对象=new 内置类型名()
访问对象:(1)对象.属性名(2)对象属性名调用闭包:对象.属性名()()(4)普通函数:对象.属性名()
对象的三个属性:原型(prototype),类(class),可扩展性(extensibleattribute)
对象API:
删除属性:delete 对象.属性名,
检测属性:(1)属性名 in 对象名
(2)对象.hasownpreperty(属性名)
(3)对象.propertyIsEnumerable(属性名)
(4)!==,
属性getter和setter:详见下
枚举属性:详见下
属性特性:详见下
对象方法:toString(),toLocaleString(),toJSON,valueOf()
对象:万事万物皆是对象,即数组,函数,正则,字符串等都是对象。
什么是枚举属性
|------------|-------------|普通for|for Each|for of----|forin|
|数字下标--|索引数组---|--✓-----|---✓----|--✓-----|--✕--|
|------------|类数组对象-|--✓-----|--✕----|--✓-----|--✕--|
|自定义下标|关联数组---|----✕---|---✕---|---✕----|--✓--|
|------------|对象---------|---✕----|--✕----|--✕-----|--✓--|
什么是封装
定义:创建一个对象,集中保存现实中一个事物属性和功能
创建对象:对象直接量,new创建对象,Object.create()
什么是类(class)
公式:集中保存一种类型的属性和方法。
格式:class 类名(对象名){构造函数+原型对象}
注意:class中原型对象是:自定义函数名(){...},构造函数是共有属性即construstr
静态属性static:不需要创建子对象,但靠类型名可直接访问的属性。
格式:static 属性名=值
访问:类名(对象名()).属性名
什么是gettter(get)和setter(set)
存取器属性:gettter(get)和setter(set)方法 即格式为:get 函数体 set函数体
数据属性:属性名:属性值
什么是属性特性
定义:配置对象属性的读取,扩展,遍历,值等扩展属性
Object.getOwnPropertyDescriptor:可以获得某个对象特定属性的属性描述符
Object.defineproperty:设置属性特性或者想具有什么样的特性
Object.defineproperties:同时修改或创建多个属性描述符
属性描述符:writeable(是否可读(存取)(是否get,set)),enumerable(是否遍历(或是否枚举)(是否for in)),configurable(是否配置(是否delect)),value(值)。属性描述符默认值为false和underfined
什么是对象可扩展性
定义:是否给对象添加新属性
API:密封Object.sealed(对象),冻结Object.freeze(对象),禁止添加新属性Object.PreventExtensions(对象)
判断:Object.isSealed(对象),冻结Object.isFrozen(对象),禁止添加新属性Object.esExtensible(对象)
什么是继承
定义:子对象继承父对象,并使用父对象定义的属性
自有属性:每一个对象(函数)都有一个原型(prototype)
extends:子对象继承(extends)父对象,使子对象能够调用父对象的属性和方法
super:操作父对象的属性和方法,在JS中super后面是括号即super(),而super只调用父对象的方法,而括号是父对象的公共属性参数,即父类的:自定义函数名(父类的公共属性参数){...}。
new 4件事:
(1)创建一个新的空对象
(2)让子对象继承构造函数的原形对象
(3)调用构造函数,将this替换为新对象,通过强行赋值的方式为新对象添加规定的属性
(4)返回新对象地址
什么是原型,原型链,原型对象
原型:对象(函数)所拥有的方法,属性等,而这些方法属性都存储在prototype即存储在原型中且都指向该函数
原型链:原形和对象形成的链式结构叫做原型链
原型对象:提所有子对象保存属性和方法的特殊父对象。
原形对象公式:构造函数.prototype
原形对象公式赋值:构造函数.prototype.共有方法=function(){},构造函数.prototype.共有属性=属性值
什么是共有属性,共有方法
共有属性construstr:保存在父对象(原形对象)中,归多个子对象共有的属性
共有方法:保存在子对象内部,只归当前子对象自由属性
什么是多态
定义:同一函数,在不同情况下表现的不同状态
包括2种重载和重写
什么是重载
重载:想同函数名,不同参数。
一个要素:判断条件arguments.length
什么是arguments:类数组对象
类数组对象:可以使用数组的API,但不是数组
什么是重写
重写:在子对象中定义和父对象一样的成员变量
什么是this?
定义:谁调用就指谁
this原则:(1)obj.fun() 中的this->.前的obj对象——谁调用,指谁<br>
(2)new Fun() Fun中的this->new 创建的新对象<br>
(3)fun或(function(){...})()或回调函数this->默认指向window<br>
(4)原形对象(prototype)中的this->将来调用这个共有函数的.前的某个子对象。<br>
(5)访问器属性中的this->访问器属性所在的当前对象<br>
替换this的三种办法:(1)只在一次调用函数,临时替换一次this用call()
(2)即要替换this,又要拆散数组传参用apply()
(3)创建函数副本,并永久绑定this用bind()
严格模式下的this:this不是指向window而是指向underfine
区别:call()只能传一个参数,apply()能传两个参数,一个是普通参数,一个是数组
什么是对象序列化
定义:将对象(字符串)的状态转换为字符串,或将对象(字符串)返回一个新的对象(字符串)
API:JSON.stringify(),JSON.parse()
JSON.stringify浅拷贝:克隆对象的属性值方法,将对象方法返回一个字符串
JSON.parse深拷贝:把对象的属性值方法提取出来然后返回一个新对象
什么是数组
定义:是数据的集合,每个数据称作元素
分类:关联数组,索引数组
创建数组:数组直接量,构造函数Array()
访问数组:数组[下标]=值
特别注意:数组.length指的是数组的数量,即看重“数”又看重“量”,不是数组的长度
API:数组.length/数组.join()/数组.reserve()/数组.sort()/数组.concat()/数组.slice()/数组.splice()/数组.push()/数组.pop()/数组.unshift()/数组.shift()/数组.toString()/数组.toLocaleString()/数组.forEach(()=>{})/数组.map(()=>{})/数组.filter(()=>{})/数组.every(()=>{})/数组.some(()=>{})/数组.reduce(()=>{})/数组.reduceRight(()=>{})/数组.indexof(()=>{})/数组.lastIndexOf(()=>{})