简单地说说TypeScript中的let

2023-05-29 21:26:06 浏览数 (1)

TypeScript面向对象实例:

代码语言:javascript复制
class Car {
  private _make: string;
  private _model: string;
  private _year: number;

  constructor(make: string, model: string, year: number) {
    this._make = make;
    this._model = model;
    this._year = year;
  }

  get make(): string {
    return this._make;
  }

  set make(make: string) {
    this._make = make;
  }

  get model(): string {
    return this._model;
  }

  set model(model: string) {
    this._model = model;
  }

  get year(): number {
    return this._year;
  }

  set year(year: number) {
    this._year = year;
  }

  drive(): void {
    console.log(`Driving a ${this._year} ${this._make} ${this._model}`);
  }
}

class SportsCar extends Car {
  private _topSpeed: number;

  constructor(make: string, model: string, year: number, topSpeed: number) {
    super(make, model, year);
    this._topSpeed = topSpeed;
  }

  get topSpeed(): number {
    return this._topSpeed;
  }

  set topSpeed(topSpeed: number) {
    this._topSpeed = topSpeed;
  }

  drive(): void {
    console.log(`Driving a ${this.year} ${this.make} ${this.model} at top speed ${this._topSpeed}`);
  }
}

let myCar: Car = new Car("Ford", "Mustang", 2021);
myCar.drive();

let mySportsCar: SportsCar = new SportsCar("Lamborghini", "Aventador", 2021, 350);
mySportsCar.drive();

输出结果如下:

代码语言:javascript复制
Driving a 2021 Ford Mustang
Driving a 2021 Lamborghini Aventador at top speed 350

var可以进行变量提升,而let是块级作用域,不可以进行变量提升。

在JavaScript中,变量提升指的是在代码执行之前,JavaScript引擎会将所有声明过的变量和函数声明提升至作用域的顶部,无论是否在代码的顶部声明。

代码语言:javascript复制
console.log(a); // undefined
var a = 10;

console.log(func()); // "Hello world!"
function func() {
  return "Hello world!";
}

在上面的例子中,变量a和函数func都被提升到了作用域的顶部。这意味着即使在代码的顶部没有声明变量或函数,它们也可以在代码的后面使用。

在实际开发中,建议在代码的顶部声明所有变量和函数,以提高代码的可读性和可维护性。同时,在使用变量或函数时,也要注意它们是否已经声明过,避免因变量提升而导致的意想不到的错误。

前端中的var和let哪个执行效率更高呢?

在执行效率方面,let比var更高效。因为let是块级作用域,在代码块执行完毕后会自动释放内存,而var则是函数作用域,不会自动释放内存,因此会占用更多的内存。同时,let也可以实现更严格的变量声明和限制,可以避免一些潜在的问题。所以建议尽量使用let,较少使用var。

0 人点赞