ES6入门:let、const、 var区别及注意事项

2023-11-17

ES6入门:let、const、 var区别及注意事项

一、let、const
1、用来声明变量或声明常量
2、let 代替 var,声明变量;const 声明常量,为了那些一旦初始化就不希望重新赋值的情况设计的
3、var、let声明的就是变量,变量一旦初始化之后,还可以重新赋值
4、const 声明的就是常量,常量一旦初始化,就不能重新赋值了,否则就会报错

var username = 'Alex';
let age = 18;
const sex = 'male';
console.log(username, age, sex);

二、const注意事项

1、使用 const 声明常量,一旦声明,就必须立即初始化,不能留到以后赋值

const sex = 'male';

2、const 声明的常量,允许在不重新赋值的情况下修改它的值

基本数据类型
const sex = 'male';
sex = 'female';    //报错,基本数据类型不可以

引用数据类型
const person = { username: 'Alex' };
// person = {};   //报错
person.username = 'ZhangSan';
console.log(person);       //{username:"ZhangSan"}

三、let、const、var的区别
1、重复声明:已经存在的变量或常量,又声明了一遍,var 允许重复声明,let、const 不允许

var a = 1;

var a = 2;
console.log(a);    //2
let a = 1;

let a = 2;
console.log(a);    //报错

function func(a) {   //在这里a已经以参数的形式存在了
  let a = 1;
}
func();   //报错

2、变量提升:var 会提升变量的声明到当前作用域的顶部,let、const 不存在变量提升

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

相当于
var a;
console.log(a);
a = 1;
console.log(a);  

letconst 不存在变量提升
console.log(a);
let a = 1;
//养成良好的编程习惯,对于所有的变量或常量,做到先声明,后使用

3、只要作用域内存在 let、const,它们所声明的变量或常量就自动“绑定”这个区域,不再受到外部作用域的影响,let、const 存在暂时性死区,var不存在

let a = 2;
function func() {
	console.log(a);
	let a = 1;
}
func();    //报错,出现let自动绑定,执行时,不能去外部作用域寻找
let b = 1;
function func() {
  console.log(b);
}
func();   //1,执行函数时,内层找不到,就可以去外层找

4、window 对象的属性和方法:全局作用域中,var 声明的变量,通过 function 声明的函数,会自动变成 window 对象的属性或方法,let、const 不会

var/function
var age = 18;
function add() {}
console.log(window.age);   //18
console.log(window.add === add);   //true

let/const
let age = 18;
const add = function () {};
console.log(window.age);   //undefined
console.log(window.add === add); //false

5、块级作用域
1、var 没有块级作用域

for (var i = 0; i < 3; i++) {
  // console.log(i);   //0,1,2
}
console.log(i); //3

2、let/const 有块级作用域

for (let i = 0; i < 3; i++) {
  // console.log(i);  //0,1,2
}
console.log(i);    //报错
//出了块级作用域就被销毁了,在全局范围内找不到了

补充:作用域链
在这里插入图片描述
作用域链:内层作用域->外层作用域->…->全局作用域

举例块级作用域
{}
for(){}
while(){}
do{}while()
if(){}
switch(){}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES6入门:let、const、 var区别及注意事项 的相关文章

  • Jquery获取选中的复选框

    您好 我想获取页面中选定复选框的列表 实际上我真正需要的是获取复选框旁边的元素的文本 该元素是一个 html 元素 li 代码如下 但它不起作用 这是我当前的 jQuery document ready function target cl
  • createHTMLNotification() 替换

    我创建了一个 Chrome 扩展程序 其中使用createHTMLNotification 在所有内容之上显示一个窗口 然而 从 Chrome 28 开始 谷歌决定放弃createHTMLNotification 完全 为什么 谷歌 为什么
  • 将 Javascript 对象的属性从 string 更改为 int

    我有一个对象数组 每个对象具有三个属性 年份 总计 人均 例子 0 Object per capita 125 8 total 1007 2 year 2009 这些属性是字符串 我想创建一个循环来遍历数组并将它们转换为 int 我尝试了以
  • 如何删除除任何特定 id 之外的元素

    假设有一个父 id 其中包含许多元素 我想删除除一个元素之外的所有元素 ex parent id children not id n remove
  • Jquery 悬停卡

    我在用着http designwithpc com Plugins Hovercard http designwithpc com Plugins Hovercard 但我不知道如何在悬停卡上声明 var 每个工作描述都有自己的 ID 当悬
  • 浏览器视口大小(以设备像素为单位)

    Goal 我希望 Flash 能够获得有关浏览器视口宽度和高度 以设备像素为单位 的准确信息初始化 调整大小或浏览器缩放事件时 规格 我需要将 flash 嵌入到在 chrome safari firefox 等中运行的 html 页面中
  • 如何正确清理来自 AngularJS 控制器的无效输入的表单?

    我有一个 AngularJS 表单 其中包含 除其他字段之外 类型之一url 后者很重要 因为这会强制相应的输入成为有效的 URL 在某些条件下 例如 要关闭具有此类表单的模式对话框 我想以编程方式清除该表单 为此 我实现了方法reset基
  • 在版本 4.4.6 中禁用 ckeditor 上下文菜单

    我在 Rails4 项目中使用 ckeditor 我尝试了 ckeditor gem 和 ckeditor rails gem 来提供 ckeditor 库 这里有多个帖子 人们希望删除 ckeditor 上下文菜单 以便可以显示本机浏览器
  • 为什么 window 与 Internet Explorer 中的 window.self 不同?

    关于我如何遇到这个问题有一个复杂的背景故事 但为什么self属性不完全等于窗口本身 在 Safari 和 Firefox 及其朋友中 结果如我所料 gt window window self true gt window window se
  • Number.IsNaN() 比 isNaN() 更糟糕吗

    Soooooo isNaNJavaScript 显然被破坏了 比如 isNaN isNaN isNaN true isNaN false isNaN 0 返回 false 当它们看起来都是 不是数字 在 ECMAScript 6 中 草案包
  • IntersectionObserver是否支持水平滚动观察?

    我制作了几个垂直滚动 IntersectionObserver 模块 但我对水平滚动感兴趣 根将是 div 观察目标将是 img 我想观察当 img 放大但 div 保持视口宽度时的变化 我什至不确定移动 Safari 是否会将缩放后的图片
  • React autoFocus 将光标设置为输入值的开头

    我有一个受控输入 最初显示一个值 我已将该输入设置为自动聚焦 但当我希望它出现在末尾时 光标出现在输入的开头 我知道这可能是因为自动对焦是在值之前添加的 但我不能 100 确定 在输入字段末尾完成光标初始化的最佳方法是什么 var Test
  • JavaScript 继承;调用和原型

    要在Javascript中实现继承 通常需要执行以下两个步骤 假设我有一个基类 Animal var Animal function name this name name 我现在想从中派生一个子类 Dog 所以我想说 var Dog fu
  • React Router v4 不渲染组件

    React Router v4 渲染组件存在问题 在应用程序初始加载时 它将呈现与 URL 相对应的正确组件 但是 任何后续的组件Link单击不会呈现所需的组件 图书馆 反应路由器 4 2 2 https reacttraining com
  • 使用 Google 日历源时如何禁用 FullCalendar 中的活动链接?

    我正在使用 FullCalendar 库从 Google 日历加载日历中的事件 不幸的是 事件添加到日历后 它们是可点击的 当您点击该活动时 您会自动重定向到 Google 日历页面以查看该特定活动 或者如果您有足够的访问权限 则可以直接对
  • 使用 Javascript 设置 cookie [重复]

    这个问题在这里已经有答案了 我正在尝试构建我的第一个移动应用程序 它需要连接到我的 mysql 数据库并使用 json 返回数据 这很好 目前我有一个登录系统 一旦确定用户名和密码存在 它就会返回一条成功消息 对于下一步 我想在我的页面上使
  • 如何从浏览器向服务器发送“页面将关闭”消息?

    我想向每个 html 文档添加一个脚本 JavaScript 该脚本向服务器发送两条消息 页面确实打开了 页面将关闭 此消息包含页面打开的时间 打开消息应在文档加载时 或加载完成时 发送 这是简单的部分 The close message
  • 滚动顶部不符合预期

    Note 由于上次忘记奖励而重新开放赏金 A Woff 大师已经给出答案 我想在用户展开某一行时到达该行 这样当最后一个可见行展开时 用户不必向下滚动即可查看内容 I used example tbody on click td green
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供

随机推荐