学习目标:模板字符串
模板字符串
例如:
// 说明对象结构的编码习惯
const horse = {
name:'🐴',
size:'高头大马',
skills:['赛马','骑马'],
age:10,
}
// 坏习惯
let biol = horse.name + '的体型' + horse.size + '具备的技能' + horse.skills.join("&")
// 好习惯 模板字符串
const {name, size, skills } = horse
let biol2 = `${name} 的体型是 ${size} 具备的技能 ${skills.join("&")}`
console.log(biol,biol2)
// 🐴的体型大号具备的技能赛马&托运 🐴 的体型是 大号 具备的技能 赛马&托运
学习内容:经典闭包
例如:
// 经典理解例子闭包
for(var i=0; i<5; i++){
function s(){
console.log(i);
}
s();
}
// 0 1 2 3 4
for(var i = 0; i< 8; i++){
const timer = () =>{
console.log(i)
}
setTimeout(timer,1000)
}
// 8 8 8 8 8 8 8 8
//setTimeout的内部函数timer并没有立即执行,for循环中的i将会把值分别赋给setTimeout外部参数中的i,但其内部函数timer()则只会引用包含函数setTimeout()中的变量的最后一个值。因为闭包所保存的是整个变量对象,而不是某个特殊的变量。当然其中的这些处理变化,都是瞬间完成的,与执行时间并无关系,即使把1000改成0效果还是一样的。
for (var i=0; i<5; i++){
(function(j){
setTimeout(()=>{
console.log(j);
},i*1000);
})(i);
}
//给外部包装了一个立即执行的匿名函数,setTimeout里面的匿名函数不再引用外部函数的参数,而是直接引用外部匿名函数的参数