React进阶之路书籍笔记
React进阶之路:
"于复合类型的变量,变量名不指向数据,而是指向数据所在的地址。const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常量必须非常小心。" (标注: const只是指向地址。对于有引用数据 例如 对象)
常量a是一个数组,这个数组本身是可写的,但如果将另一个数组赋值给a,就会报错。"
(标注: const1声明常量 不能修改 2;引用常量 指向引用内存;引用内存的值是可以修改的,但是不能对引用地址重新赋值)
上面的代码在代码块中分别用let和var声明了两个变量。然后在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只在其所在代码块有"
" for循环的计数器,就很适合使用let命令。
for(let i = 0; i < 10; i++){
console.log(i) //correct
}
console.log(i) //error 错误 let 适合在代码块中使用 可以改用var
//ReferenceError 以上代码中的计数器i,只在for循环体内有效。 下面的代码如果使用var,最后将输出10"
"上面的代码中,由于typeof运行时x尚未声明,所以会抛出一个ReferenceError。"
"之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上称为“暂时性死区”(temporal dead zone,简称TDZ)。 "
"const用来声明常量。一旦声明,其值就不能改变。
const PI = 3.1415; PI // 3.1415 PI = 3; // TypeError: "PI" is read-only ,const一旦声明常量,就必须立即初始化,不能留到以后赋值
const foo // SyntaxError: missing = in const declaration
"面的代码中,常量foo储存的是一个地址,指向一个对象。不可变的只是这个地址,即不能把foo指向另一个地址,但对象本身是可变的,所以依然可以为其添加新属性。"
"const a = []; a.push("Hello"); // 可执行 a.length = 0; // 可执行 a = ["Dave"];"
- "果真的想将对象冻结,应该使用Object.freeze方法。 const foo = Object.freeze({}); foo.prop = 123; // 不起作用 上面的代码中,常量foo指向一个冻结的对象,所以添加新属性不起作用。 "
"从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。 "
"果箭头函数不需要参数或需要多个参数,就使用圆括号代表参数部分。
箭头函数
var f = () => {
5
}
// 等同于 var f = function (){ return 5 }; ()中传参数 {}中写代码块
var sum = (num1, num2) => num1 + num2; // 等同于
var sum = function(num1, num2) {
return num1 + num2;
};
"var sum = (num1, num2) => { return num1 + num2; } 由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号。 var getTempItem = id => ({ id: id, name: "Temp" });"
".函数体内的this对象就是定义时所在的对象,而不是使用时所在的对象。"
"一点尤其值得注意。this对象的指向是可变的,但在箭头函数中它是固定的。"
"果是普通函数,执行时this应该指向全局对象,但是箭头函数导致this总是指向函数所在的对象。"
var handler = {
id: "123456", init: function () {
document.addEventListener("click", event => this.doSomething(event.type), false);
},
doSomething: function (type) { console.log("Handling " + type + " for " + this.id); }
};
"上面的init方法中使用了箭头函数,这导致this总是指向handler对象。否则,回调函数运行时,this.doSomething这一行会报错,因为此时this指向全局对象。"
"this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。正因为它没有this,所以也就不能用作构造函数。"
"以下3个变量在箭头函数中也是不存在的,分别指向外层函数的对应变量:arguments、super和new.target。 "
"头函数“绑定”this,很大程度上解决了这个困扰。"
"const plus1 = a => a + 1; const mult2 = a => a * 2; mult2(plus1(5)) // 12 箭头函数还有一个功能,就是可以很方便地改写λ演算。"
"数绑定运算符是并排的双冒号(::),双冒号左边是一个对象,右边是一个函数。该运算符会自动将左边的对象作为上下文环境(即this对象)绑定到右边的函数上。"
"指某个函数的最后一步是调用另一个函数。"
"面的代码中,情况一是调用函数g之后还有赋值操作,所以不属于尾调用,即使语义完全一样;情况二也属于调用后还有操作,即使写在一行内;情况"
"况三等同于下面的代码。 function f(x){ g(x); return undefined; }"
es5语法 map遍历
var a = [1,2]
a.map((index,i)=>{ //index 索引 从0开始,i map中包含的值
console.log("ssss",i,index) //ssss 0 1 ssss 1 2
})
React进阶之路书籍笔记的更多相关文章
- 通过阅读《React 进阶之路》之学习笔记
第一章: React 通过引入虚拟DOM.状态.单向数据流等设计理念,形成以组件为核心,用组件搭建UI的开发模式.
- 处女作《Web全栈开发进阶之路》出版了!
书中源码下载地址:https://github.com/qinggee/WebAdvanced 01. 当初决定写博客的原因非常的纯洁:只要每个月写上 4 篇以上博客,月底的绩效奖金就多 500 块. ...
- Android研发进阶之路
前言 移动研发火热不停,越来越多人开始学习android开发.但很多人感觉入门容易成长很难,对未来比较迷茫,不知道自己技能该怎么提升,到达下一阶段需要补充哪些内容.市面上也多是谈论知识图谱,缺少体系和 ...
- Android研发技术的进阶之路
前言 移动研发火热不停,越来越多人开始学习android开发.但很多人感觉入门容易成长很难,对未来比较迷茫,不知道自己技能该怎么提升,到达下一阶段需要补充哪些内容.市面上也多是谈论知识图谱,缺少体系和 ...
- OpenCV进阶之路:神经网络识别车牌字符
1. 关于OpenCV进阶之路 前段时间写过一些关于OpenCV基础知识方面的系列文章,主要内容是面向OpenCV初学者,介绍OpenCV中一些常用的函数的接口和调用方法,相关的内容在OpenCV的手 ...
- 2017PHP程序员的进阶之路
2017PHP程序员的进阶之路 又是一年毕业季,可能会有好多毕业生即将进入开发这个圈子,踏上码农这个不归路.根据这些年在开发圈子总结的LNMP程序猿发展轨迹,结合个人经验体会,总结出很多程序员对未来的 ...
- Spark进阶之路-Standalone模式搭建
Spark进阶之路-Standalone模式搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Spark的集群的准备环境 1>.master节点信息(s101) 2&g ...
- Spark进阶之路-日志服务器的配置
Spark进阶之路-日志服务器的配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果你还在纠结如果配置Spark独立模式(Standalone)集群,可以参考我之前分享的笔记: ...
- Scala进阶之路-Scala中的高级类型
Scala进阶之路-Scala中的高级类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.类型(Type)与类(Class)的区别 在Java里,一直到jdk1.5之前,我们说 ...
随机推荐
- 算法与数据结构基础 - 队列(Queue)
队列基础 队列具有“先进先出”的特点,用这个特点我们可以用它来处理时间序列相关或先后次序相关的问题,例如 LeetCode题目 933. Number of Recent Calls,时间复杂度O(1 ...
- 【微信小程序】记录
学习新东西时,大体都遵循一样的道理,由总入深. 以下整理一下学习小程序的过程.虽然现在做的东西还有许多问题,比如说数据超过一定数量时循环效率低,或者是多次跳转页面后会变卡等问题.这些问题只解决了部分, ...
- CSS3 - vue中纯css实现柱状图表效果
背景 以前我们制作柱状图都用echarts或者其他同类型的图表插件 这次是个移动端的需求,而且这个图表需要动画 使用echarts就会显得过重,而且动画达不到我想要的效果(主要是我自己愚蠢想不到好的动 ...
- c# 开发ActiveX控件,添加事件,QT调用事件
c# 开发 ActiveX 的过程参考我的另一篇文章 : https://www.cnblogs.com/baqifanye/p/10414004.html 本篇讲如何 在C# 开发的ActiveX ...
- python的比较关系运算符和逻辑运算符
比较运算符 运算符 描述 示例 == 检查两个操作数的值是否相等,如果是则条件变为真. 如a=2,b=2则(a == b) 为 true. != 检查两个操作数的值是否相等,如果值不相等,则条件变为真 ...
- 使用NLog记录业务日志到数据库
项目中很多时候要记录业务日志,其实是可以直接用日志框架计入数据库的. 使用NLog并不是只能将日志主体插入数据库,而是可以根据实际情况自定义任意列记入.非常方便.而且很容易实现 下面是用NLog记录业 ...
- Windows和linux环境下按文件名和字符串搜索命令
Windows 1.遍历C盘下所有txt 命令:for /r c:\ %i in (*.txt) do @echo %i 注释:for 循环的意思 /r 按照路径搜索 c:\ 路径 %i in ( ...
- myecliese加大内存
加大内存代码 : -Xms512m -Xmx1024m -XX:PermSize=256M -XX:MaxPermSize=1024m
- 让Redis突破内存大小的限制
Redis虽然可以实现持久化存储,也是基于数据内存模型的基础之上,单机内存大小限制着Redis存储的数据量,有没有一种替代方案呢?本文介绍一款笔者使用的采用New BSD License 许可协议的软 ...
- 利用jenkins实现自动构建、部署,提升团队开发效率
一大早就被群里的同学刷银川下雪的消息,看着我都发冷,突觉一阵凉风裹身,是不是该考虑秋裤了. 偏离主题,正文走起...... 使用jenkins目标:利用其结合maven完成自动构建,并部署到tomca ...