第九周 var与let 箭头函数 解构赋值

1. let和var有什么区别?

1.1 分析区别

不能重复声明一个变量

拥有块级作用域

不存在变量提升

1.2 分析代码剖析原因

1.2.1

function sayHi(){
    console.log(name);
    console.log(age);
    var name = 'Lily';
    let age = 21;
}
sayHi()

A. Lily 和 undefined

B. Lily 和 ReferenceError

C. ReferenceError 和 21

D. undefined 和 ReferenceError

答案是什么?并解释一下为什么

d, var 存在变量提升,所以执行顺序为

var name;
console.log(name);
name = "Lily";

而let不存在,就打印时没有name这个变量

1.2.2

var name = 'Matt'; 
console.log(window.name); 
let age = 26; 
console.log(window.age);  

Matt 和undefined

var不存在块级作用域,所以就直接name就是window全局的

let存在块级作用域,所以window.age 与age就不是一个东西,而属性如果没有赋值就会返回undefined

1.2.3

for (var i = 0; i < 5; ++i) { 
 // 循环逻辑 
} 
console.log(i); 

for (let i = 0; i < 5; ++i) { 
 // 循环逻辑
} 
console.log(i);

5 5
这两个i应该都是之前var定义的全局的i,var不存在块级作用域,所以定义的i是全局的,然后let有块级作用域,出了for就不生效。假如将第二个for中5改为4,也不会对结果造成影响。

1.2.4

for (var i = 0; i < 5; ++i) { 
 setTimeout(() => console.log(i), 0) 
} 
for (let i = 0; i < 5; ++i) { 
 setTimeout(() => console.log(i), 0) 
}

5个5 和 0 到4

setTimeout()是异步任务

第一个循环,每次定义一个计时器,而这个计时器是一个全局的变量,当i发生改变的时候,这个setTimeout里面的i值也会改变,到最后一次执行++i,i=5,退出循环时执行5次console.log(i) i = 5;

第二个循环,let有块级作用域,不会被下一次i的改变而影响到,所以就是从1到4

2. 箭头函数

2.1 箭头函数有哪些特点?

  1. this是静态的,始终指向声明时的作用域,无法改变。
  2. 不能用argument变量。

2.2 分析代码

const shape = {
  radius: 10,
  diameter() {
    return this.radius * 2;
  },
  perimeter: () => 2 * Math.PI * this.radius
};
console.log(shape.diameter());
console.log(shape.perimeter());

20 NaN

箭头函数中this.radius是未定义的,因为箭头函数中this是静态的,指向perimeter,而perimeter中不存在radius属性

3.请用代码解释解构赋值

数组

const score = [90, 100, 95];
let [math, English, Chinese] = score;

这个不是很常用

对象

const student = {
  name: "",
  score: 100,
  gotoschool: function(){
    console.log("1");
  }
}
let {gotoschool} = student;
//或者let {name, score, gotoschool} = student;
gotoschool();  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值