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之前,我们说 ...
随机推荐
- composer使用本地仓库
{ "repositories": { "sms": { "type": "path", "url" ...
- 开源joda-time使用demo
开源joda-time 1.maven中引入 <dependency> <groupId>joda-time</groupId> <artifactId> ...
- Python将pyc转为py
安装pip install uncompyle2, 使用uncompyle2 xxx.pyc > xxx.py
- Selenium Grid分布式测试环境搭建
Selenium Grid简介 Selenium Grid实际上是基于Selenium RC的,而所谓的分布式结构就是由一个hub节点和若干个node代理节点组成.Hub用来管理各个代理节点的注册信息 ...
- scrapy基础知识之下载中间件使用案例:
1. 创建middlewares.py文件. Scrapy代理IP.Uesr-Agent的切换都是通过DOWNLOADER_MIDDLEWARES进行控制,我们在settings.py同级目录下创建m ...
- C# 中奇妙的函数–6. 五个序列聚合运算(Sum, Average, Min, Max,Aggregate)
今天,我们将着眼于五个用于序列的聚合运算.很多时候当我们在对序列进行操作时,我们想要做基于这些序列执行某种汇总然后,计算结果. Enumerable 静态类的LINQ扩展方法可以做到这一点 .就像之前 ...
- c#中bin,obj,properties文件夹的作用
Bin 目录用来存放编译的结果,bin是二进制binrary的英文缩写,因为最初C编译的程序文件都是二进制文件,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/R ...
- C++中 / 和 % 在分离各位时的妙用
在学习c++的过程中,我们一般用 / 和 % 来分解数字的各个位 取整 (/) 比如1234 / 10 等于 123.4,这相当于把前三位分解出来了 取余(%) 比如 12345 的分解方法 个位:1 ...
- 利用Python模拟GitHub登录
最近学习了Fiddler抓包工具的简单使用,通过抓包,我们可以抓取到HTTP请求,并对其进行分析.现在我准备尝试着结合Python来模拟GitHub登录. Fiddler抓包分析 首先,我们想要模拟一 ...
- kuangbin专题 专题一 简单搜索 迷宫问题 POJ - 3984
题目链接:https://vjudge.net/problem/POJ-3984 这个题目,emm,上代码,看的估计应该是刚开始接触搜索的,我带点注释,你能慢慢理解. #include <ios ...