JS中的变量声明
  WYub0BgMG5Ci 2023年12月07日 25 0

使用关键字 let var const来进行声明

如果不使用关键字来进行声明,也是能声明的,这时这个变量就成了全局变量(非严格模式下),严格模式下会报错ReferenceError;

function example() {
  console.log(a);  // 输出:undefined,变量 a 已被提升,但尚未赋值
  a = 1;           // 赋值,此时 a 变成了全局对象的属性
  console.log(a);  // 输出:1
}

example();
console.log(a);  // 输出:1,因为 a 已成为全局对象的属性

三种方式区别

因为let和const差不多,所以主要说 var 和 let 的区别

变量声明区别

var 声明的变量,是函数作用域的;简单来说就是在函数内声明,函数内可以使用,出了函数就不能使用;如果在全局进行声明,那么被声明的变量就会变成 window 对象的属性;

let 声明的变量,是块级作用域的;同一个块内可以用,出了这个块就不能用;全局声明不会成为window 对象的属性;

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

声明提升区别

使用 var 来声明变量时,先使用变量,再声明变量,变量在使用时的值为 undefined ,原理如下:

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

// 与下面代码等同
var age;
console.log(age)
age = 1;

js 执行代码时,会将所有变量的声明提升到最上边,当执行到原本的声明变量那一行时,再赋值;可以理解为先占位,再设置这个指向的指针;

使用 let 来声明的时候,不会进行变量提升,会进入暂时性死区;

const的特殊性

跟 let 相比,const 只是不能修改的变量;其特殊性在于

  1. 定义一个不能修改的变量
  2. 定义常量,例如 MAX_NUM = 123

此外需要注意的是,如果 const 定义了一个对象,我们仍然可以修改其中的内容,但是我们不能直接让这个对象指向另一个对象;

const student = {
  age : 1 ,
  name : 'test'
}
student.age = 2
console.log(student) //{age: 2, name: 'test'}

student = {} //Uncaught TypeError: Assignment to constant variable.
						//at <anonymous>:1:9
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月07日 0

暂无评论

WYub0BgMG5Ci