TypeScript学习总结(2)

在上一个发的文章之后,我有一些疑问,就是声明变量有的用var,有的用let,还有的用const,那这些有什么区别呢,为此我深入查找学习了一下。

一、作用域不同

var声明的变量,其作用域是全局作用域或者是函数作用域。在函数内部声明的变量只在函数内部有效,而在函数外部声明的变量在整个函数外部都有效。

这个通过下面的代码来解释

var a: number = 10;
console.log(a);

在这段代码可以看出,var声明的变量a在整个全局都是有效的

function Newfunction() { 
    var b = 1
    
}
console.log(b) // error: b is not defined

 而在这段代码可以看出,在函数内部声明的变量b,在函数外部就无法调用,这里就可以说明var是函数作用域。

说完了var,我们现在来说let和const,这两个关键字声明的变量的作用域是块作用域。

什么是块作用域呢?

简单点来说,块是由{}包裹的代码

if (true) { 
    var b: number = 20;
    let c: number = 30;
    const d: number = 40;
    console.log(c);
    console.log(b);
    console.log(d);
}
console.log(b);
console.log(c); // Error: c is not defined
console.log(d); // Error: d is not defined

 这段代码中声明了三个变量,其实变量b在if语句里可以被打印,在外部也可以被打印,而let声明的变量c、const声明的变量d只能在{}内部访问,这就说明了let和const声明的变量作用域是块作用域。

二、能否更新和重新声明

直接通过代码解释

从这些代码中可以看出来:

var变量可以更新和重新声明

let变量可以更新但是不能重新声明

const变量既不能更新也不能重新声明

三、 变量提升的区别

 那什么是变量提升呢

变量提升就是在代码执行之前,将变量的声明和函数的声明提升到当前作用域的顶部,只有声明提升,赋值不提升

console.log(a)
var a = 10
console.log(a)

 上面这段代码第一行打印由于没有声明变量a,typescript会在内部将声明提升,在内部第一行自己声明变量a,但是赋值不提升,最终输出undefined和10

undefined
10

在变量提升方面,它们都被提升到了作用域的顶部。但是var 变量会被初始化为undefined,let和const 不会被初始化,而是会报错

console.log(a)
let a = 10
console.log(a)
ReferenceError: Cannot access 'a' before initialization

 在最后呢,希望大佬批评指正,我们共同进步!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值