0
点赞
收藏
分享

微信扫一扫

JS红书宝--var,let和const声明变量

九月的栩 2022-04-26 阅读 49
javascript

var,let和const声明变量

var 声明

var声明作用域

function test() { 
 var message = "hi"; // 局部变量
} 
test(); 
console.log(message); // 出错!

为什么会报错呢?

这里调用test()函数,会创建这个变量并给它赋值,但在调用之后变量随即被销毁

可以采用下面的方法

function test() { 
 message = "hi"; //全局变量
} 
test(); 
console.log(message); // "hi"

var声明提升

解析器会先解析代码,然后把声明提升到最前面

使用var声明,变量会提升到最前面,如下面一段代码

console.log(a); //undefined
var a = 1;
console.log(a);  //1

//以上代码解析器执行过程如下
var a;
console.log(a); //1
a = 1;
console.log(a); //1

例二

var food = "apple";
   function ac() {
     if (false) {
      var food = "banana";
     }
   console.log(food);
}
ac();		//undefined

//把false替换成true 输入即为banana

let 声明

let声明作用域

let 和 var最主要的区别是,let声明的范围是块级作用域,而var声明的范围是函数作用域

//var声明
if(true){
    var age = 18;
    console.log(age); // 18
}
console.log(age);    //18

//let声明
if(true) {
    let age = 18;
    console.log(age);  //18
}
console.log(age);      // ReferenceError: age 没有定义

这里,age变量的作用域仅限于该块的内部, 块级作用域是函数作用于的子集 ,而let声明的范围是块级作用域,无法在if块外部引用

不能重复声明

let和const 都不能在同一作用域中声明同一个变量 var可以

var name;
var name;//不报错

let age;
let age; // SyntaxError;标识符 age 已经声明过了
//const也是如此

注意重复声明是出现在同一个作用域中

const 声明

  • const声明变量时必须初始化,且在后面修改const声明的变量会运行错误
  • const声明对象可以修改对象的属性,但不能赋给对象一个新对象

暂存性死区

上述提到过 let和var的最重要的区别在于let声明的变量不会在作用域中被提升

console.log(age);  //undefined
var age = 18;

//而let和const不会提升
console.log(name); //ReferenceError:age 没有定义
let name = 'WBT'  

全局声明

var name = 'Matt'; 
console.log(window.name); // 'Matt' 

let age = 26; 
console.log(window.age); // undefined

使用let在全局作用域声明的变量不会成为window对象的属性

声明风格

举报

相关推荐

0 条评论