var,let和const的区别

2021-09-30  本文已影响0人  瓯海

1.基本使用

2.let和const的作用域提升

console.log(foo); //undefined
var foo = 'hello';

先输出foo在用var定义foo,控制台输出的是undefined,说明foo在编译之前就可以访问了,但是没有赋值,赋值的操作是在编译的时候进行的,说明用var声明的的变量是有作用域提升的(可以提前访问变量)

console.log(bar);
let bar = 'hello';
//ReferenceError: Cannot access 'bar' before initialization

用let声明变量,控制台报错,输出在初始化值之前不能访问bar,说明在执行上下文的时候let关键词没提升作用域

3.let,const和window的关系

var foo = 'hello';
console.log(foo);
window.foo;

4.块级作用域

{
var foo = 'foo'
}
console.log(foo) //foo

在块级作用域里面用var声明的变量时没有作用域的

{
  let foo = 'foo';
  function bar() {
    console.log('hello');
  }
  const baz = 'baz';
}
console.log(foo);// ReferenceError: foo is not defined
bar();//hello
console.log(baz); //ReferenceError: bazis not defined

let和cosnt是有作用域的在内部的声明变量,在外面是不能被访问到的,但是函数可以,这是因为引擎会对函数的声明进行特殊的处理,允许像var那样进行提升,在开发环境下使用let和cosnt声明变量最大的好处是不会有意外的变量被修改,但是在为了适配早期的浏览器,将代码打包后,这些关键字都会变成var

上一篇 下一篇

猜你喜欢

热点阅读