Skip to content

Commit

Permalink
review
Browse files Browse the repository at this point in the history
  • Loading branch information
Vacricticy committed Jun 15, 2020
1 parent 7c76de1 commit 358f7c3
Show file tree
Hide file tree
Showing 11 changed files with 30 additions and 23 deletions.
File renamed without changes.
4 changes: 3 additions & 1 deletion 3.函数进阶/08.call,apply,bind的区别
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ call,apply,bind
实际应用场景:
call:实现属性的继承
apply:常跟数组有关系,可以借助数据对象查找数组的最大值最小值
bind:用于不调用函数,但想改变this指向的情况。比如改变定时器中this的指向
bind:
应用1:单纯想改变this指向的情况。比如改变定时器中this的指向
应用2:绑定点击事件,通过传递参数将全局变量window传入到函数内部
2 changes: 1 addition & 1 deletion 3.函数进阶/12.js难点之闭包-什么是闭包.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<body>
<script>
// 1.闭包的概念:
// 闭包是一个函数,一个作用域可以访问另一个函数的局部变量。包含该局部变量的函数就是闭包函数,可以通过debug断点查看到
// 闭包是一个函数,该函数中的局部变量可以被其他函数访问到。闭包可以通过debug断点查看到
// 下述中的闭包函数指的就是fn函数。
// function fn() {
// var num = 10;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,29 +17,31 @@
</ul>
</div>
<script>
// 闭包应用1:立即执行函数+点击事件(点击事件中会用到立即执行函数中的变量)
// 闭包应用1:点击li标签后输出对应的索引号
// 原理:立即执行函数+点击事件(点击事件中想要获取的变量可以通过立即执行函数来获取)

var lis = document.querySelectorAll('li');
// 简单方法:
// lis.forEach((value, index) => {
// value.index = index
// value.onclick = function() {
// console.log(index);
// }
// })

// 为了演示闭包的作用
// 只是为了演示闭包的作用
// 通过闭包的形式打印li的索引
// lis.forEach((value, index) => {
// // 向立即执行函数传递index属性
// for (var i = 0; i < lis.length; i++) {
// // 立即执行函数也称为小闭包,因为立即执行函数中任何一个函数都可以使用其中的成员变量
// (function(index) {
// // 绑定的事件中访问的index是立即执行函数中的index
// value.onclick = function() {
// console.log(index);
// (function(i) {
// lis[i].onclick = function() {
// // 此时访问的i变量是闭包函数的变量,不再是外部的变量
// console.log(i);
// }
// })(index)
// });
// })(i)
// }



// 由于存在闭包关系,index变量的内存不会被立即释放,但这样的变量多了可能导致内存泄漏。

// 面试问题:如何通过闭包实现点击li打印对应的索引号的功能
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
</ul>
</div>
<script>
// ❤闭包应用2:立即执行函数+定时器(定时器中会用到立即执行函数中的变量)
// ❤闭包应用2:点击li标签2秒后打印出对应的索引值
// 原理:立即执行函数+定时器(在定时器中想要使用的变量可以通过立即执行函数获取)

var lis = document.querySelectorAll('li')

Expand All @@ -28,6 +29,7 @@
for (var i = 0; i < lis.length; i++) {
(function(i) {
setTimeout(function() {
// 由于处在闭包函数中,此时的i指向的是立即执行函数的i值
console.log(lis[i].innerHTML);
}, 2000)
})(i)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@

<body>
<script>
// 闭包应用3:立即执行函数+return函数(return的函数中会用到立即执行函数中的变量)
// 闭包应用3:计算打车价格
// 原理:立即执行函数+return函数(return的函数中想要使用的变量可以通过立即执行函数来获取)

// 注意:这里只是为了演示闭包在实际中可以通过什么方式使用,这里的业务其实不应该用闭包来实现

Expand Down
5 changes: 2 additions & 3 deletions 3.函数进阶/17.递归函数.html
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,10 @@

function getDataById(data, id) {
var o = {}
data.forEach(function(item) {
data.some(function(item) {
if (item.id === id) {

// console.log(item);
o = item;
return true;
// 关键点1:当在外层找不到id时,先判断是否存在children属性,若存在,再递归调用查询
} else if (item.children && item.children.length > 0) {
// 关键点2:此处必须把再次调用的函数的返回值赋值给o,否则你无法接受到再次调用函数时返回的结果
Expand Down
2 changes: 1 addition & 1 deletion 3.函数进阶/18.深拷贝与浅拷贝.html
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
// newObj[k] = []
// deepCopy(newObj[k], oldObj[k]);
// // 判断是不是对象
// // 注意:需要先判断是不是数组,再判断是不是对象,因为数组也属于对象
// // 注意:需要先判断是不是数组,再判断是不是对象,因为数组也属于对象
// } else if (oldObj[k] instanceof Object) {
// newObj[k] = {}
// deepCopy(newObj[k], oldObj[k])
Expand Down
9 changes: 5 additions & 4 deletions 4.正则表达式/02.正则表达式各种符号介绍.html
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
// console.log(reg8.test('_')); //false
// console.log(reg8.test('-')); //false
// console.log(reg8.test('!')); //true
// console.log(reg8.test('aa')); //false

// 9.量词符*,表示可以出现0次或多次
// var reg9 = /^a*$/
Expand Down Expand Up @@ -101,10 +102,10 @@
// console.log(reg16.test('5-2')); //false

// 17.或:|
var reg17 = /^\d{3}|abc$/
console.log(reg17.test('512')); //true
console.log(reg17.test('5-2')); //false
console.log(reg17.test('abc')); //true
// var reg17 = /^\d{3}|abc$/
// console.log(reg17.test('512')); //true
// console.log(reg17.test('5-2')); //false
// console.log(reg17.test('abc')); //true
</script>
</body>

Expand Down

0 comments on commit 358f7c3

Please sign in to comment.