学习ES6

学习链接:ES6 - 语法 - ES6教程 | 编程字典

1.ECMAScript(ES)是由ECMAScript International标准化的脚本语言规范。应用程序
使用它来启用客户端脚本
2.Node.js是一个开源的跨平台运行时环境,用于服务器端JavaScript
  需要Node.js才能在没有浏览器支持的情况下运行JavaScript
3.enum枚举类
4.ES6忽略程序中出现的空格,制表符和换行符
5.程序是提高程序可读性的一种方法

6.ES6功能分为三组:组装,分阶段功能,进行中
7."use strict"严格模式
8.提升:
   JavaScript引擎默认将声明移到顶部,这个功能被称为吊装。提升允许JavaScript在声明之前使用
组件。但是,提升的概念不适用于在严格模式下运行的脚本。
9.变量:
   变量是存储值的”存储器中的命名空间”,充当程序中的值的容器
   变量名称称为标识符
10.动态属性:
    JavaScript是一种无类型的语言,这意味着JavaScript变量可以保存任何数据类型的值。
    在变量声明期间,不必告诉存哪种类型的值,变量的值类型可以在执行程序期间更改,
JavaScript会自动处理它。这个功能被称为动态类型
11.变量范围:全局和本地
    全局范围-全局范围的变量可以从JavaScript代码的任何部分访问
    本地范围-可以从声明的函数内访问具有本地范围的变量
12.函数外(全局范围),函数内(局部范围)
    函数内引用的变量显示本地作用域变量的值,在函数外部访问时的变量将返回全局范围的实例
    ES6定义了一个新的变量作用域=块范围
    块范围限制变量对声明块的访问权限
13.let:
    let关键字允许脚本将对变量的访问限制在最近的封闭块中
14.常量:
    const声明为一个值创建一个只读引用。这并不意味着它所拥有的价值是不可变的,只是变量标识符不能被重新分配。
   以下规则适用于使用const关键字声明的变量:
   ·常量不能被重新赋值
   ·常量不能重新声明
   ·一个常量需要一个初始化器。这意味着常量必须在声明期间被初始化
   ·分配给const变量的值是不可变的
15.变量提升:
     用var声明的变量的范围是其当前的执行上下文,它是封闭函数
     注:提升的概念适用于变量声明,但不适用于变量初始化。建议始终在其作用域顶部(全局代码
顶部和功能代码顶部)声明变量,以使代码能够解析变量的作用域

16.表达式是一种特殊的语句,它可以评估一个值,每个表达都是由:
     操作数-表示数据
     运算符-定义操作数如何处理以产生值
17.操作符:
    算数运算符,关系运算符,逻辑运算符,按位运算符,赋值运算符,
    杂项操作符:否定运算符(-),连接运算符(+),条件运算符(?)
    类型操作符:typeof
18.条件 决策构造
19.循环:
    循环表示必须重复的一组指令,在循环的上下文中,重复被称为迭代
20.确定的循环:
   for/for..in循环:for循环执行代码块指定的次数
   for..of循环:for循环用于迭代而不是对象文字
   无限循环:while,do...while
   do..while循环不会在第一次循环执行时评估条件
21.循环控制语句:
    break语句用于将控件从构造中取出
    continue语句跳过当前迭代中的后续语句,并将控制权带回循环的开头
22.函数:函数是可读,可维护和可重用代码的构建块,函数调用
23.一对分隔符({})定义了函数体,它也被称为功能范围,必须调用一个函数来强制执行
24.函数分类:函数可分为返回和参数化函数
     默认值初始化参数,参数的默认值被覆盖

25.Rest参数:其余参数不会限制传递给函数的值的数量。但是,传递的值必须都是相同的类型。换
句话说,其余参数充当相同类型的多个参数的占位符。
    参数名称前面加上三个句点,称为展开操作符
    注:Rest参数应该是函数参数列表中的最后一个参数
26.匿名函数:不绑定到标识符(函数名称)的函数被称为匿名函数。这些函数在运行时动态声明。
匿名函数可以接收输入和返回输出,就像标准函数一样。匿名函数在初始创建后通常不可访问。
    变量可以分配一个匿名函数,这样的表达称为函数表达式
27.函数构造函数:
     以下是使用Function()构造函数和new运算符创建函数的语法
     var variablename = new Function(Arg1,Arg2...,"Function Body");
     Function()构造函数需要任意数量的字符串参数,最后一个参数是函数的主体,它可以包含任意
的JavaScript语句,用分号分隔
     var func = new Function("x","y","return x*y;");
28.递归:递归是一种通过让一个函数自己重复调用自身来迭代一个操作直到它到达结果的技术。递
归最适用于需要使用循环内的不同参数重复调用相同函数的情况
     该函数使用一对括号()来调用它自己
29.Lambda函数:
     Lambda是指编程中的匿名函数。Lambda函数是一个简洁的机制来表示匿名函数,这些功能也称为
箭头功能
  ·参数-函数可以有选择地使用参数
  ·胖箭头符号/lambda符号(=>):它也被称为去运算符
  ·语句-表示函数的指令集
   提示-按照惯例,鼓励使用单个字母参数以实现紧凑而精确的功能声明
   单个语句的可选花括号。空括号没有参数

30.函数表达式和函数声明:
   函数表达式和函数声明不是同义词。与函数表达式不同,函数声明受函数名称的约束
   两者之间的根本区别在于,函数声明在执行之前被解析。另一方面,函数表达式仅在脚本引擎在
执行期间遇到它时才被解析。
   当JavaScript解析器在主代码流中看到一个函数时,它将采用函数声明。当一个函数作为语句的
一部分出现时,它就是一个函数表达式
31.函数提升:
     像变量一样,函数也可以被挂起。与变量不同,函数声明在被挂起时提升函数定义而不是提升函
数的名称
     但是,函数表达式不能被挂起
32.立即调用函数表达式:
     立即调用的函数表达式(IIFE)可用于避免块内的变量提升。它允许公众访问方法,同时保留函数
中定义的变量的隐私。这种模式被称为自我执行的匿名函数
33.生成器功能:当一个正常的函数被调用时,控件将停留在被调用的函数中,直到它返回。使用ES6
中的生成器,调用者函数现在可以控制被调用函数的执行。
   ·该功能可以在任何时候让控制权回到主叫方
   ·当你调用生成器时,它不会立即运行。相反,你得到一个迭代器。该函数在调用迭代器的下一个
方法时运行
   生成器通过后缀函数关键字用星号表示,否则,它们的语法与常规函数相同
34.生成器启用调用者和被调用函数之间的双向通信,通过使用yield关键词来完成
     生成器函数不能用箭头函数表示

35.事件:
    事件是由软件识别的行为或事件。它可以由用户或系统触发。一些常见的事件示例包括用户单击
按钮,加载网页,单击超链接等,
36.事件处理程序:
    在发生事件时,应用程序执行一组相关的任务。实现此目的的代码块称为事件处理程序
37.onsubmit = "return validate()",
    如果validate()函数返回true,表单将被提交,否则它不会提交数据
39.Cookies:
     Web浏览器和服务器使用HTTP协议进行通信,HTTP是无状态协议,即它不会维护客户端的多个请求
中的客户端数据。客户端和服务器之间的这个完整的请求-响应循环被定义为一个会话。Cookie是浏
览器用来存储与用户会话有关的数据的默认机制。
40.页面重定向:
     重定向是一种将用户和搜索引擎从原来请求的URL发送到不同URL的方式。页面重定向是一种自动将网页重定向到另一个网页的方式,

41.JavaScript页面重定向:
    window.location对象是window对象的一个属性,它可用于获取当前的URL地址(网址)并将浏览
器重定向到新页面。
42.window.navigate()方法类似于window.location.href属性分配一个新值。因为它只在MS
Internet Exolorer 中可用,所以你应该避免在跨浏览器开发中使用它。
43.重定向和搜索引擎优化:
    如果你想通知搜索引擎(SEO)你的URL转发,你应该添加rel="canonical"meta标签到你的网站主
管部分,因为搜索引擎不会分析JavaScript来检查重定向
44.对话框:
    JavaScript支持三种重要类型的对话框。这些对话框可用于提高和提醒,或获取任何输入的确认
或从用户那里获得一种输入。
    警告对话框,alert,可更友好的消息,警报框只提供一个按钮“确定”以选择并继续
    确认对话框,主要用于取得用户对任何选项的同意,confirm
    提示对话框,prompt
45.void关键字:
    该运算符指定一个要评估的表达式而不返回值。运算符评估给定的表达式,然后返回undefined
   当使用立即调用的函数表达式时,可以使用void来强制将函数关键字视为表达式而不是声明
46.<a href = "javascript:void(javascript:alert('hello world!!))">
    点击评估javascript:alert("hello")并传递给void()运算符。但是,由于void操作符返回未定义
,因此页面上不显示任何结果

47.打印函数window.print()
48.对象:
    JavaScript支持扩展数据类型,JavaScript对象是定义自定义数据类型的好方法
    一个对象是一个包含一组键值对的实例。与原始数据类型不同,对象可以表示多个或复杂的值,并
可以改变其使用期限。值可以是标量值或函数,甚至可以是其他对象的数组
49.在ES6中,分配与属性名称匹配的属性值,可以省略属性值
50.一个新的属性总是可以添加到以前定义的对象。
51.Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。
52.比较对象:
    在JavaScript中,对象是引用类型。两个不同的对象永远不会相等,即使它们具有相同的属性。
这是因为它们指向一个完全不同的内存地址。只有那些共享公共参考的对象才能比较真实
53.对象解构:
    解构这个术语是指分解一个实体的解构。JavaScript中的解构赋值语法可以将数组或对象中的数组
提取到不同的变量中。
54.数字:
     在数字的地方,如果提供任何非数字参数,则参数不能转换为数字,它会返回NaN(Not-a-Number)
55.在ES6之前,当涉及到二进制或八进制整数表示时,最好的方法就是将它们传递给基数的
parseInt().在ES6中,可以使用O6和Oo前缀分别表示二进制和八进制整数文字,十六进制:Ox
56.布尔:
     布尔对象表示两个值,true或false。如果省略value参数或者是0,-0,null,NaN,undefined或空
字符串(""),则该对象的初始值为false

57.布尔属性:
    constructor,返回创建该对象的布尔函数的引用
    prototype,原型属性允许将属性和方法添加到对象
    布尔方法:
    toString(),根据对象的值返回"true"或"false"的字符串
  valueOf(),返回布尔对象的原始值
58.字符串:
    String对象可以让你使用一系列字符;它用一些辅助方法包装JavaScript字符串原始数据类型
    由于JavaScript会自动在字符串基元和字符串对象之间进行切换,因此可以调用字符串基元上字符
串对象的任何助手方法
59.模板文字:是允许嵌入表达式的字符串文字,使用(``),可用占位符来使用${}语法进行字符串替

60.使用变量来存储值会带来以下限制:
   ·变量本质上是标量的。换句话说,变量声明一次只能包含一个变量。这意味着要在程序中存储n
个值,需要n个变量声明。因此,当需要存储更大的值集时,变量的使用是不可行的。
   ·程序中的变量按随机顺序分配内存,因此难以按照声明的顺序检索/读取值
61.一个数组是一个齐次的值集合。为了简化,数组是相同数据类型的值的集合。它是用户定义的类型。

62.数组的特征: 
  ·数组声明分配连续的内存块
  ·数组是静态的,这意味着一个初始化的数组无法调整大小
  ·每个内存块表示一个数组元素
  ·数组元素由一个称为元素的下标/索引的唯一整数标识
  ·数组也像变量一样,应该在使用之前声明
  ·数组初始化是指填充数组元素
  ·数组元素值可以更新或修改,但不能删除
   []被称为数组的维数
63.数组名称后跟下标用于引用数组元素
64.for..in循环来遍历数组
65.ES6引入了两个新的数据结构:地图和集合
     Maps-此数组结构可将键映射到值
     Sets-集合与数组类似,但是,不鼓励重复
66.类:一个类封装了对象的数据
    类体只能包含方法,而不能包含数据属性
    与变量和函数不同,类不能被挂起
67.类继承:
    ES6支持继承的概念。继承是程序从现有实体创建新实体的能力。扩展来创建更新类的类称为父类
/超类。新创建的类称为子、子类
    一个类使用'extends'关键字从另一个类继承。子类继承除父类的构造函数之外的所有属性和方法
,子类获得对父类属性(即区域)的隐式访问

68.super关键字用于引用类的直接父级
69.promise:是一种干净的方式来实现JavaScript中的异步编程
70.回调:函数可以作为参数传递给另一个函数。这种机制被称为回调。回拨将有助于事件。
71.函数调用是同步的,意味着UI线程将等待完成整个通知过程。同步呼叫称为阻塞呼叫。
72.模块:
    必须将ES6模块转换为ES5代码,以便我们可以运行和测试代码。转译是将代码从一种语言转换为
其对应语言的过程。ES6 Module Transpiler是一款将ES6模块编译为CommonJS或AMD风格的ES5兼容代
码的工具
73.错误处理:编译中有三种类型的错误:语法错误,运行时错误和逻辑错误,语法错误
    语法错误:当JavaScript中出现语法错误时,只有包含在与语法错误相同的线程中的代码才会受
到影响,而其他线程中的其余代码会被执行,因为它们中的任何内容都取决于包含错误的代码。
    运行时错误:也称为异常,异常也会影响其发生的线程,从而允许其他JavaScript线程继续正常
执行
    逻辑错误:可能是最难追查的错误类型
74.验证:
   JavaScript提供了一种在发送到Web服务器之前验证客户计算机上的表单数据的方法。表单验证通
常执行两个功能。
   ·基本验证-首先,必须检查表单以确保填写所有必填字段。只需要在表单中的每个字段循环并检
查数据
   ·数据格式验证-其次,必须检查输入的数据是否有正确的格式和数值,代码必须包含适当的逻辑
来测试数据的正确性

75.调试:
   查找和修复错误的过程称为调试,并且是开发过程的正常部分
   JavaScript验证器
   node debug,用Node.js进行调试
以下学习(以上或许也有,忘了)链接:https://github.com/zhangtianyi0110/VueLearnNotes
76.
定义对象:
```javascript
const name = "zzz";
const age = 18;
const user = {
    name,age
}
console.log(user);
定义函数
```javascript
const obj = {
  run(){
     console.log("奔跑");
  }
}
箭头函数:
```javascript
//const ccc = (参数列表) => {}
  const ccc = () => {}
函数代码块中只有一行代码,可以省略return:
const mul = (num1,num2) => num1* num2
77.filter过滤函数
78.map高阶函数
79.reduce高阶函数

80.//三个需求综合
let n = nums.filter(num => num > 50).map(num => num * 2).reduce((preValue,currentValue)
=> preValue + currentValue)
console.log(n);
81.const:
   ·定义常量,赋值后不能再赋值,再赋值报错
   ·只声明不赋值,必须赋值
   ·常量的定义是不能改变其指向的对象,但可以改变对象的属性
82.箭头函数没有this,this引用的是最近作用域
83.vue是声明式编程
84.
### 2.1.1命令式编程

?    原生js做法(命令式编程)

1. 创建div元素,设置id属性
2. 定义一个变量叫message
3. 将message变量放在div元素中显示
4. 修改message数据
5. 将修改的元素替换到div

### 2.1.2声明式编程

     vue写法(声明式)

1. 创建一个div元素,设置id属性
2. 定义一个vue对象,将div挂载在vue对象上
3. 在vue对象内定义变量message,并绑定数据
4. 将message变量放在div元素上显示
5. 修改vue对象中的变量message,div元素数据自动改变
85.为了给vue一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,需要为每项
提供一个唯一'kty'属性。尽可能在使用v-for时提供'key'attribute,除非遍历输出的DOM内容非常简
单,或者是刻意依赖默认行为以获取性能上的提升
86.key是vue识别节点的一个通用机制。不要使用对象或数组之类的非基本类型值作为'v-for'的'key'
请用字符串或数值类型的值
87.es6导出:export default
88.使用v-pre,不会解析
89.Mustache 是一款经典的前端模板引擎
90.v-once,只会渲染一次,数据改变不会再次渲染
91.使用v-html,url显示链接的意思,否则文字显示
92.使用v-text,以文本形式显示,会覆盖
93.使用v-pre,不会解析,{{message}}
94.在vue解析前,div中有一个属性cloak
   在vue解析之后,div中没有一个属性v-clock
[v-cloak]{
      display: none;
    }
<div id="app" v-cloak>
    <h2>{{message}}</h2>
  </div>
95.methods,即使firstName和lastName没有改变,也需要再次执行
   computes,计算属性有缓存,只有关联属性改变才会再次计算
   只是方法调用需要使用(),而计算属性不用,方法取名字一般是动词见名知义,而计算属性是属
性是名词,但这只是基本使用
96.计算属性一般没有set方法,只读属性,只有get方法
97.计算属性范围在vue实例内,修改vue实例外部对象,不会重新计算渲染,但是如果先修改了vue实
例外对象,在修改vue计算属性的对象,那么外部对象的值也会重新渲染
98.btnClick3(event,value)  @click="btnClick3($event,123)"
99.v-on的修饰符
  @click.stop的使用,btn的click事件不会传播,不会冒泡到上层,使用event.stopPropagation()
  .prevent调用event.preventDefault阻止默认行为
  @keyup.enter="keyup"  监听键盘的事件
100.事件:
  事件没传参,可以省略()
  事件调用方法传参了,写函数时候省略了小括号,但是函数本身是需要传递一个参数的,这个参数
就是原生事件event参数传递进去
  如果同时需要传入某个参数,同时需要event是,可以通过'$event'传入事件
101.v-if用于条件判断,判断Dom元素是否显示
102.单独使用v-if,变量为布尔值,为true才渲染Dom
    v-show的变量也是布尔值,为true才显示内容,类似css的display
103.*如果已经输入了账号,此时想切换到邮箱输入,输入框未自己清空
   vue在进行Dom渲染时,出于性能考虑,会复用已经存在的元素,而不是每次都创建新的DOM元素
   在上面demo中,Vue内部发现原来的Input元素不再使用,所以直接将其映射对应虚拟DOM,用来复

   如果不希望出现类似复用问题,可以给对应的dom元素加上'key'值,并保证'key'不同
104.v-show:
   v-if看似和v-show实现一样的效果,但是内部v-show只是用css将操作的元素隐藏显示,而v-if是
新增和删除元素。v-show只是操作元素的style属性display,都没会被创建
105.v-for(value,key,index),属性,属性值,索引
106.for-in是遍历键名,for-of是遍历键值
107.
 // return this.books.map(function (book) {
        //   return book.price * book.count
        //  }).reduce(function (preValue,currentValue) {
        //     return preValue + currentValue
        //   })
108.toFixed:把数字转换为字符串,结果的小数点后有指定位数的数字:
    转载链接:https://www.cnblogs.com/zazahao/p/10705411.html
    javascript中toFixed使用的是银行家舍入规则。

银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。

简单来说就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要
进一。
109.:disabled="book.count<=1"
110.@input
       只要输入的值变化了就会触发input
111.$event.target.value
当你触发input事件时,$event 是当前的事件对象。 $event.target.value指向的是当前的input的值
112.v-model修饰符:
       lazy,默认情况是实时更新数据,加上lazy,从输入框失去焦点,按下enter都会更新数据
       修饰符number,默认是string类型,使用number赋值为number类型
       修饰符trim:去空格
113.v-model:
      v-model双向绑定,即输入框的value改变,对应的message对象值也会改变,修改message的值,
input的value也会随之改变。无论改变哪个值,另外一个值都会改变
114.`v-model = v-bind + v-on`,实现双向绑定需要是用v-bind和v-on,使用v-bind给input的value
绑定message对象,此时message对象改变,input的值也会改变。但是改变input的value并不会改变
message的值,此时需要一个v-on绑定一个方法,监听事件,当input的值改变的时候,将最新的值赋
值给message对象。'$event'获取事件对象,target获取监听的对象dom,value获取最新的值
115.radio单选框的'name'属性是互斥的,如果使用v-model,可以不使用'name'就可以互斥
116.创建组件构造器对象:const cpnc = Vue.extend
117.Vue.component全局组件,components局部组件
118.<script type="text/x-template" id="apn1">组件模板的分离写法
119.组件的数据存放必须要是一个函数:
      组件的思想是复用,定义组件当然是把通用的公共的东西抽出来复用
120.使用`this.$children`直接获取当前实例的直接子组件,需要注意`$children`并不保证顺序,也不是响应的。如果你发现自己正在尝试使用`$children`来进行数据绑定,考虑使用一个数组配合,`v-for`来生成子组件,并且使用Array作为真正的来源。
121.计算属性的本质:
       fullName:{set(),get()},默认get()
122.计算属性和methos对比:
       计算属性在多次使用时,只会调用一次,有缓存的
123.如果Vue实例对象中有template参数选项,则将其作为模板编译成render函数
       如果没有template参数选项,则将外部的HTML作为模板编译(template),也就是说,template参数选项的优先级要比外部的HTML高
124.beforeMount:
       载入前(完成了data和el数据初始化),但是页面中的内容还是vue中的占位符,data中的message信息没有被挂在到Dom节点中,在这里可以在渲染前最后一次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取
       Mount:
       载入后html已经渲染(ajax请求可以放在这个函数中,把vue实例中的data里的message挂载到DOM节点中去
       这里两个钩子函数间是载入数据
125.在Vue中,修改数据会导致重新渲染,依次调用beforeUpdate钩子函数和updated钩子函数
       如果待修改的数据没有载入模板中,不会调用这里两个钩子函数
126.只有写入模板的数据才会被追踪
127.beforeDestroy:
       销毁前执行($destroy方法被调用的时候就会执行),一般在这里善后;清除计时器,清除非指令绑定的事件等等)
       destroyed:
       销毁后(Dom元素存在,只是不再受vue控制),卸载watcher,事件监听,子组件
128.总结:
     ·boforecreate:可以在这加个loading事件
     ·create:在这结束loading,还做一写初始数据的获取,实现函数自-执行
     ·mounted:在这发起后端请求,拿回数据,配合路由钩子做一些事情
     ·beforeDestroy:你确定删除?
     ·destroyed:当前组件已被删除,清除相关内容
129.template和HTML优先级,template优先
130.使用导出全局变量模块解决全局变量同名问题
131.使用`module.exports = {}`导出需要的对象
       使用`var {flag,sum} = require("./aaa")`获取已经导出的对象中自己所需要的对象
132.实现模块化,在html中需要使用`type='moudle'`属性
133.webpack是一个JavaScript应用的静态模块打包工具
134.grunt/glup的核心是Task
     ·我们可以配置一系列的task,并且定义task要处理的事务(例如ES6/TS转化,图片压缩,scss转css)
     ·之后可以让grunt/glup来执行依次这些任务,让整个流程自动化
     ·所以grunt/glup也被称为前端自动化任务管理工具
看一个gulp例子
     ·task将src下的js文件转化为ES5语法
     ·并输入到dist文件夹中
135.什么时候使用grunt/gulp呢?
     ·如果工程依赖简单,甚至没有模块化
     ·只需要进行简单的合并/压缩
     ·如果模块复杂,相互依赖性强,我们需要使用webpack
   grunt/glup和webpack区别
    ·grunt/glup更加强调的是前端自动化流程,模块化不是其核心
    ·webpack加强模块化开发管理,而文件压缩/合并/预处理等功能,是附带功能
136.nvm是node管理工具可以自由切换node环境版本
137.-g全局安装,--save-dev局部安装
138.npm run dev//开发环境    npm run build//生产环境
139.css-loader只负责css文件加载,不负责解析,要解析需要使用style-loader

140.webpack使用多个loader是从右往左解析的,所以需要将css-loader放在style-loader右边,先加载后解析。
此时样式成加载解析到DOM元素上。
141.loader和plugin的区别
       loader主要用于转化某些类型的模块,是一个转化器。
       plugin主要是对webpack的本身的扩展,是一个扩展器。
142.我们将`webpack.config.js`文件分成了三个部分,公共部分、开发部分、构建发布的部分。

     1.如果此时是dev环境,我们只需要使用`base.config.js`+`dev.config.js`的内容
     2.如果此时是生产发布构建的环境,我们只需要使用`base.config.js`+`prod.config.js`的内容要将两个文件内容合并需要使用`webpack-merge`插件,安装`webpack-merge`。
143.什么情况下要使用Promise?
      new Promise((resolve, reject) => {
      setTimeout(() => {
      有异步操作是,使用promise对异步操作进行封装
      new=>构造函数(1.保存一些状态信息 2.执行传入的函数)
      在执行回调函数时候(resolve,reject)本身又是函数
144.什么是Promise?
      简单说Promise是异步编程的一种解决方案,是ES6中的特性
145.什么是异步操作?
       网络请求中,对端服务器处理需要时间,信息传递过程需要时间,不像我们本地调用一个js加法函数一样,直接获得`1+1=2`的结果,这里网络请求不是同步的有时延,不能立即得到结果

146.如何处理异步事件?
       对于网络请求这种,一般会使用回调函数,在服务端传给数据成功后,调用回调函数。例如ajak调用
147.什么时候使用Promise?
       如何解决异步请求冗余这样的问题,promise就是用于封装异步请求的
148.Promise的三种状态:
       pending:等待状态,比如正在进行的网络请求还未响应,或者定时器还没有到时间
       fulfill:满足状态,当我们主动回调了resolve函数,就处于满足状态,并会回调then()
       reject:拒绝状态,当我们主动回调reject函数,就处于该状态,并且会回调catch()
149.什么是Vuex
       Vuex就是一个状态管理模式,为什么叫模式?因为Vuex包含了一套对state(状态)的操作规范,集中存储管理应用的所有组件的状态。
150.状态管理
       简单来说就是管理各个组件共享的数据,类似session

- session可以存数据,存的过程就是管理,数据的每一次赋值就是当次状态。

- Vuex在Vue实例顶层中。
  Vuex也可以理解为java中的一个map,这个map是static(静态资源)的,每次获取map的值,都需要调用java的api,比如map.get(key)获取对应的值,也可以放入数据map.put(data),而且这个数据是所有类都可以调用的,只需要导入这个map就能使用里面的共享数据。
151.[HMR] connected   所以HDR开头的信息提示由webpack/hot/dev-server模块产生
152.部署生产环境我们要做几件事:
       一.build新建config.js,配置一些通用设置;
       二.build新建webpack.config.dev.js,区分开发模式和生产模式的配置,其实可以写在一个文件中,弊端就是代码太长,而且开发模式require()的组件比较多,生产模式没必要加载,所以分开;
153.再运行开发环境就用npm run dev ,生产就用npm run pro
154.ue.config.productionTip = false 阻止vue启动生产消息

155.

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值