iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 3
0

var let 和const 的区别

let不能在定义之前访问访问该变量,但是var可以。即let必须先定义再使用,而var则可以,只是var未定义使用,其值为underfined。

console.log(x) // underfined
var x = 3 // 即使这里给x赋值,但是先使用的话,默认都认为是undefined

let 和 const都是块级作用域 看一道很经典的题目吧

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

第一个循环的输出全都是5,而第二个的数是从0-4 为啥呢? 第一个是用的var来定义一个变量,第二个用的是let。 而且定时器是一个宏任务,会在循环结束之后才执行,这个循环结束之后的i的值是5,那么就会循环五次5, 第二个同理,但是此时的j在for循环中形成了一个块级作用域,所以每次输出的值,都是单次循环中j的值。

const和let的区别,let定义的值可以被重复改变,const的不可以,这个涉及到了Object.freeze之类的问题,将这个变量冻结起来,不能被改变,但如果他是一个对象的话,可以改变对象中的值。 可以看看这一篇

对象属性的get和set

const obj = {
name:'cxwht',
get name(){
return 'thwxc'
}
}
console.log(obj.name) // "thwxc"
每一个属性都可以有自己的get和set方法,get就是当这个属性被RHS(右查询)的时候执行的函数,并且给出返回值,简单来说就是读取这个属性的时候,那么set,就是给这个属性LHR的时候,执行的操作,我们可以用这个来模拟一下const,即 给一个属性set值的时候,抛出一个错误,并且get值不变即可

const obj = {
name:'cxwht',
get name(){
return 'thwxc'
},
set name(v) {
throw new Error('Don't set this number')
}
}
obj.name = 1 // Uncaught Error: Don't set this number
console.log(obj.name) // "thwxc"


上一篇
Day 2 实现Promise的一些API
下一篇
DAY4 箭头函数和THIS
系列文
30天前端面試題分享4

尚未有邦友留言

立即登入留言