ES6学习笔记1 let 和 const

STM32F407 CanOpen主机实战:对象字典配置与多电机CIA402协议驱动详解 本文详细介绍了基于STM32F407的CanOpen主机开发实战,重点解析了对象字典的配置流程与多电机CIA402协议驱动方法。通过使用objdictedit工具配置SDO和PDO参数,并整合CanFestival协议栈,实现了对多个伺服电机的稳定同步控制。文章提供了从硬件连接到代码调试的完整指南,帮助开发者快速掌握工业现场的多轴运动控制技术。 阅读详情

let

let命令与var用法类似,用于声明变量,区别在于其声明的变量只在let命令所在的代码块中有效

for (let i=0; i<10; i++){
    //....
}

console.log(i);   //变量i未定义

在for循环中,设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域,上述i在循环的作用域中定义,因此在循环体外,let声明的i不再有效。

var命令存在“变量提升”,即函数声明和变量声明总是会被解释器悄悄地被”提升”到方法体的最顶部,因此可以在变量声明之前使用,但let命令不允许出现这种状况,其声明的变量一定要在声明后使用,否则会报错。在let命令声明变量之前这段时间,变量不可被访问,称为暂时性死区

console.log(foo);   //变量i未定义
var foo = 2;

console.log(bar);   //报错
let bar = 2;
var tmp = 123;
if (true){
    tmp = 321; //报错
    let tmp;
}

不允许在同一个作用域内重复声明变量

function(){
    let a = 10;
    var a = 1;  //报错
}

ES6允许块级作用域的任意嵌套,外层作用域无法读取内层作用域的变量,而内层作用域可以定义外层作用域的同名变量

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

为了减轻不兼容问题,在ES6浏览器中,块级作用域中的函数声明语句的行为类似于var声明变量,会被提升到全局作用域或函数作用域的头部,同时还会提升到所在块级作用域的头部。而在其他环境中,函数声明类似于let语句。

// 浏览器的 ES6 环境
function f() { console.log('I am outside!'); }

(function () {
  if (false) {
    // 重复声明一次函数f
    function f() { console.log('I am inside!'); }
  }

  f();
}());
// Uncaught TypeError: f is not a function

在ES6浏览器中,上述代码会报错,是因为函数f()未定义

因此,由于环境导致的行为差异太大,应该避免在块级作用域中声明函数,即使需要,也应该写成函数表达式的形式

{
    let a = '1';
    let b = function(){
        return a;
    };
}

ES6块级作用域声明函数必须使用大括号,否则会报错

if (true){
    function f()
}

const

const声明一个只读常量,一旦声明,就必须初始化赋值,且不能再重新赋值

const PI = 3.14;
PI    //3.14

PI = 3;   //报错
const a;   //报错

const与let命令相同,只在声明的块级作用域有效,且不会被提升,存在暂时性死区,不可重复声明

{
    const a = 1;
}
a       //报错

const实际上保证的是变量指向的那个内存地址不得改动,对于简单类型的数据,值就保存在内存地址中,而对于对象来说,变量指向的内存地址保存的只是一个指针,因此只是保证这个指针是固定的,而对象本身可以被修改

const a = [];
a.push('hello');  //可执行
a.length = 0;    //可执行
a = ['1'];   //报错

如果真想使对象冻结,可以使用Object.freeze方法,使其变为不可篡改对象,具体可参考https://blog.youkuaiyun.com/zjw_python/article/details/80109580

顶层对象的属性

var命令和function命令声明的全局变量是顶层对象的属性,而let命令、const命令、class命令声明的全局变量不属于顶层对象的属性

var a = 1;
window.a    //1

let b = 2;
window.b    //未定义
实战封神!YOLOv7 轻量化部署全攻略:ONNX格式转换+TensorRT极致加速(速度直接提升3-5倍,精度无损) 部署核心链路,这是YOLO系列部署的最优解,速度提升3~5倍,精度无损;ONNX是桥梁:解决模型兼容性问题,简化后能去掉冗余节点,是TensorRT加速的前提;TensorRT是核心:NVIDIA显卡的极致加速引擎,FP16量化是速度与精度的最优平衡,无需手动配置,一键开启;轻量化终极组合YOLOv7-tiny + 416尺寸 + TensorRT FP16,速度提升5~8倍,满足所有实时检测场景;避坑核心:转换参数必加,推理尺寸必须一致,engine文件显卡专属。 阅读详情

相关推荐

微信图片.dat文件解密实战:用Python一键转PNG(附完整代码)

本文详细介绍了如何通过Python解密微信图片.dat文件并转换为PNG格式的完整教程。文章深入解析了微信.dat文件的异或加密原理,提供了自动检测密钥的Python脚本,并分享了批量解密和性能优化的实用技巧,帮助用户轻松恢复和整理微信聊天图片。

weixin_29096377的博客 465

ES6学习笔记1:let和const命令

目录 文章目录let 命令基本用法变量提升暂时性死区不允许重复声明为什么需要块级作用域?块级作用域与函数声明块级作用域怎么来?const命令基本用法本质冻结对象ES6 声明变量的六种方法顶层对象的属性globalThis对象this关键字获取顶层对象的两种方法 let 命令 基本用法 let 命令是用来声明变量,和 var 用法类似,但是let 所声明的变量作用域只在所在的代码块内有效。 在for...

W先生 679

『ISOBUS 入门』第 00 节 导言:ISOBUS 的宏观图景与入门路径

ISOBUS 是由三部分构成的集成系统:两段CAN网络(拖拉机与农具侧)、标准化通信约定及认证流程。其核心在于通过统一协议实现跨品牌设备即插即用。标准体系以ISO 11783为基础,分层涵盖物理层、传输层至应用层,关键功能如虚拟终端(VT)、任务控制器(TC)和文件服务器依赖严格的会话管理与角色分工。实际部署中,总线上传输多种协议报文,故障排查需结合地址声明、多包传输与角色权限分析。学习应从真实报文入手,建立“角色—数据流—功能块”认知链,避免仅学标准或仿真替代实测,方能有效应对复杂现场问题。

linx295的博客 282

es6学习笔记1-let与const

let命令 1.let的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。 2.let所声明的变量一定要在声明后使用,否则报错。就是不存在变量提升的问题。 3.ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。 4.let不允许在相同作用域内,重复声明同一个变量。 块

MjCreator的博客 640

ABtest描述统计功效

我们在面试数据分析时,常常会问到如何确定样本量的问题,会有一个指标:统计功效(power),或者是1-β 统计功效会影响实验的可信度,甚至会影响实验所需的样本量,要了解统计功效,首先要理解两类统计错误 假如我们做了一个AB实验,且两组用户的数据均值为μ1和μ2,我们会有两个初始假设: H0:两个实验组的数据没有差别(μ1=μ2),这个假设也叫“零假设”,也叫原假设 H1:两个实验组之间的数据存在差别(μ1≠μ2),这个假设也叫“非零假设”,也叫备择假设 定义两类错误: 实验本身没有效应,但我们觉

qq_38134556的博客 899

怎么在豆包里做生成式引擎优化(GEO)

本文系统介绍了豆包平台生成式引擎优化(GEO)的全套方法体系。文章首先解析了豆包与传统搜索引擎的核心差异,强调其多模态理解和上下文感知特性,并指出GEO需从关键词匹配转向用户意图动态解析。随后详细阐述了GEO优化的三大核心策略:用户意图解析技术、实时内容适配框架和权威信号强化方法,配以技术实现路径和案例说明。最后提出GEO与SEO融合的未来趋势,建议企业构建统一知识库,实现全渠道声誉管理。全文包含大量实操代码和工具链指导,为企业在AI时代的内容优化提供系统解决方案。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 2378

前端ES6学习笔记(1):let和const

前端ES6学习笔记(1):let和const ES6新增了let关键字和const关键字,他们与var最大的区别在于作用域。 在es6之前,没有块作用域的概念,只有函数作用域和全局作用域 如下 { let a=10; var b=1; const c=20; } a //ReferenceError: a is not defined. b //1 c //ReferenceError...

csl784513390的博客 290

【产品】 产品设计:如何解决铝合金氧化着色后表面硬度低的问题(硬质氧化)

1、氧化处理技术 1)化学氧化 化学氧化处理所获得的膜层较薄,一般厚度为0.5μm ~4μm,质软不耐磨,抗蚀能力低于阳极氧化膜。 一般不宜单独便用,由于化学氧化膜吸附能力好,主要作用于油漆的底层,化学氧化按其溶液性可分为碱性和酸性两种。按其膜层性质可分为氧化膜,磷酸盐膜、铬酸盐膜及磷酸一铬酸盐膜等(这类型的氧化膜是可导电)。 2)电化学氧化(阳极氧化) 电化学氧化(俗称阳极氧化)是铝及...

产品线负责人 9732

ES6 学习笔记1—简介、let和const命令、变量的解构赋值

上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。但是,浏览器没有遵守这个规定,为了兼容以前的旧代码,还是支持在块级作用域之中声明函数,因此上面两种情况实际都能运行,不会报错。

BlackWolfSky的博客 835

DeepSeek Harness“一切皆插件”核心机制详解

DeepSeek Harness 的“一切皆插件”核心 = Cordis 微内核 + 服务化能力接口 + 声明式依赖注入 + 类型化事件 + 可逆副作用 + 配置层 Profile/Bundle/Patch 组合。它的工程收益是:把模型、工具、循环、存储、UI 等所有 Agent 能力都变成“可从配置替换、可干净装卸”的单元,而不是写死在框架里。

软件行业技术文化交流。 600

166、电流环带宽测试

本文分享了电流环带宽测试的实战经验,揭示了常见误区:误将系统其他环节(如PWM、ADC、传感器)的延迟当作电流环性能。强调带宽测试需先断开速度/位置环,采用扫频法注入正弦信号,结合伯德图分析幅值与相位响应。关键点包括:控制频率步进为对数、确保采样时序精准、避免传感器带宽限制影响结果。文中指出“假带宽”现象(如鼓包、增益超0dB)多源于非线性或机械共振,建议遵循“先开环后闭环”“带宽非越高越好”“阶跃验证”三原则,并建立出厂基准曲线以支持后期故障诊断。

2401_88858637的博客 177

ES6语法学习笔记(1)- let.const命令

#ES6语法学习笔记(1)- let.const命令 ######“use strict”;ES5开启严格模式,变量声明不能使用,ES6中默认开启, ######使用let声明变量不能重复申明变量 function test(){ var a = 2; // for(let i=1;i<3;i++){ // console.log(i); // }//...

qq_41537989的博客 235

Claude Code 完整详解(Anthropic 官方 AI 编程 Agent)

它是运行在终端(Terminal)的 AI 编程代理,不是普通 IDE 插件;你用自然语言发指令,它自主规划步骤、读写项目文件、执行系统命令、排查 Bug、处理 Git 工作流,是能真正动手干活的 AI 程序员。真正的AI 开发代理人,不止写代码,还能执行开发全流程超长全局上下文,大型项目理解碾压传统补全工具终端原生 + IDE 双接入,开发流程无割裂代码质量、可读性、工程规范性普遍偏高权限安全机制完善,修改前预览、可随时中断回滚。

wange6906的博客 3156

es6学习笔记1-let const

一.新增let const 命令 有以下几点特性: 1.块级作用域,即只能用于此命令所在作用域; 2.不存在变量提升,即必须先申明再进行使用; 3.暂时性死区,即块级作用域除外的外部区域无法使用该块级作用域以内的变量; 4.不允许重复声明,在同一块级作用域中无法重复进行声明; 5.let创建了块级作用域,而块级作用域内可声明函数,该函数在块级作用域之外不可用; 6.const声明一个只读的常量,一旦声明将无法改变;123点特性const同样具有; 7.es5中顶层对象的属性赋值与全局变..

cloudgaps的博客 276

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ES6 学习笔记 1 let与const

ES6新增了let 命令 用法类似于var 但是声明的变量只在let命令所在的区域内有效{ let a = 10; var b = 1; } a //ReferenceError: a is not defined. b //1for 循环的计数器,就很使用let命令for (let i = 0;i < 10;i++) {} console.log(i); //ReferenceEr

web开发日记 291

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【ES6学习笔记】1.let的使用,以及let var const的区别

let的特性let的特性:1.变量名不能重复声明 2.块级作用域 3.不存在变量提升 4.不影响作用链。

凌小添的博客 130

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ES6学习笔记1--let、const

前言:正在学习es6的相关内容,将主要内容记录方便以后查阅。let声明,在块级作用域内有效。const声明常量。

Marx的学习空间 399

ES6学习笔记(1,let和const)

在介绍let和const之前我们先复习一下相关的知识点。 关于函数作用域 开发过程中,在ES6(ECMA2015)标准推出之前,声明变量的方式一直都是var,而变量的作用域一般也只在函数内部,即函数作用域。 function a () { var test = 1; } console.log(test); //error, test is not defined 上面的实例反应了当我们定...

weixin_30378311的博客 122

1、let和const -ES6学习笔记

基本概念let命令: 用来声明一个变量,和var非常类似。 const命令: 用来声明一个常量,常量就是不可以变化的量。用let声明变量的注意事项1 使用let声明的变量,所声明的变量只在命令所在的代码块内有效。//所谓的代码块就是一对花括号,然后再花括号里面写上所需要的代码 //例如 { let a = 1; var b = 2; console.log(a); //1

xyphf的博客 444

ES6学习笔记(1)----let和const命令

参考书《ECMAScript 6入门》 http://es6.ruanyifeng.com/ let和const命令 let 总结 1.声明变量基本使用方法与var 相同 不同点 a.在代码块...

QDY5945的博客 197

【学习笔记】——ES6(1)let与const变量

内容来自阮一峰的es6入门,我自己阅读后加以记录,以方便自己查阅。在es6中,变量的申明新增了let,const,import , class 命令,加上ES5的var命令和function命令,现在一共有6种申明变量的方法。先来说let,let其实和var命令差不多,只不过只在let命令所在的代码块内有效,或者说只在它所在的‘{}’内有效。举几个例子:&lt;!DCOTYPE&gt; &lt;h...

24min的博客 305

《ES6标准入门》学习笔记(1)——1. let和const命令

let命令基本用法用于声明变量,但是只在let命令所在的代码块内有效。{ let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1注意:for循环有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。for (let i = 0; i &lt; 3; i++) { ...

weixin_38385524的博客 209

es6学习笔记(1) let和const命令详解

let和const命令: Es6新增了let命令,声明变量,但与var不一样的,只在let命令所在的代码块内有效(如for循环之外let声明的变量就不再有效)。并且let不像var那样会发生“变量提升”现象,所以,变量一定要在声明后使用,否则报错。 暂时性死区; 只要块级作用域内存在let命令,它所声明的变量就“绑定”binding这个区域,不再受外部的影响。 注意:...

weixin_34233856的博客 103

understanding ES6 学习笔记1 块级作用域 let 与const

一.let与const let、const与var的区别 1.首先的一点,也是最重要的,let与const是块级作用域,而var是函数作用域。    详解: 你在一个大括号中定义了let 与 const{},在函数外是无法访问的,而var 只有定义在函数里面,外部才无法访问。 2. let与const没有变量提示,意味着,你无法在声明他们之前去使用他们。     详解:        ...

Gurad233的博客 317

ES6学习笔记1--let和const命令、解构赋值和Symbol

let和const命令 let命令 在声明所在的块级作用域内有效。 只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。 在同一个作用域内,不允许重复声明变量。var可以重复声明。 let命令不存在变量提升。var命令会发生”变量提升“现象。因此使用let命令声明的变量,凡是在声明之前就...

weixin_33700350的博客 349

es6学习笔记-let,const和块级作用域_v1.0_byKL

es6学习笔记-let,const和块级作用域_v1.0 块级作用域 javascript 原来是没有块级作用域的,只有全局作用域和函数作用域 例子1 因为没有块级作用域,所以每次的i都是一样 var a = []; for (var i = 0; i < 10; i++) {//变量i是var声明的,在全局范围内都有效 ...

weixin_34411563的博客 163
上一篇: Django开发微信小程序之逆波兰计算器(四)历史记录的获取和保存
下一篇: ES6学习笔记2 变量的解构赋值
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值