const、let、var的区别
2024-08-28 07:35:43
const不能从字面上来理解,他不能修改的是栈内存在的值和地址。
使用const声明的是常量,在后面出现的代码中不能再修改该常量的值。
怎么理解栈内存在的值和地址呢?就要从javascript的类型说起:
基本类型 Boolen, Number, String 是把直接值直接存在栈内
引用类型 Object(Function, Array ....)是把值存在对应的地址中
const b = 2;//正确 // const b;//错误,必须初始化 console.log('函数外const定义b:' + b);//有输出值 函数外const定义b:2 // b = 5; //错误,Assignment to constant variable.
const:
如果定义了一个基本数据类型,比如number,string 。。。 这样的话是常量,绝对不可改变。
如果用const去定义一个Object或者Array,只能说Object或者Array本身是常量,但是还是可以他们添加删除或修改属性或者元素的。。。
let是块级作用域,函数内部使用let定义后,对函数外部无影响。
var array = [1, 2, 3];
var q = 1; array = array.map((v) => {
return v + q;
}) console.log(array); //[2, 3, 4]
var array = [1, 2, 3];
let q = 1; array = array.map((v) => {
return v + q;
}) console.log(array);
//Uncaught SyntaxError: Identifier 'q' has already been declared
if (xxx) {
let a = 1;
} console.log(a); // Uncaught ReferenceError: a is not defined if (yyy) {
console.log(a); // Uncaught ReferenceError: a is not defined
]
var 和 let 的区别在于作用区块。
The
let
statement declares a block scope local variable, optionally initializing it to a value.[1]
The
variable
statement declares a variable, optionally initializing it to a value.
以上是 MDN 的定义,直白地说,var 的作用域是当前 scope 的所有子作用域,包括当前作用域中声明或调用的函数或是 while / for / if / try-catch 语法区块。
SO~建议:
为了让自己的代码可读性更好,赋值之后不会再做修改了就用const
,如果后边还会修改就用let
,不建议使用var
了
最新文章
- LINQ系列:Linq to Object串联操作符
- JavaScript中绑定事件监听函数的通用方法addEvent() 和 事件绑定之bindEvent()与 unBindEvent()函数
- mac 10.9 安装 gevent
- Spring实现文件上传
- WOW.js – 在页面滚动时展现动感的元素动画效果
- SSRS 的简单使用(一)
- jmeter 如何将上一个请求的结果作为下一个请求的参数——使用正则提取器
- JS操作cookie以及本地存储(sessionStorage 和 localStorage )
- Error : L6218E: Undefined symbol downloadAddress (referred from nand.o).
- Using Git subtrees to split a repository
- PostgreSQL的 initdb 源代码分析之十一
- iOS application: how to clear notifications?
- PHP学习笔记三十三【自定义错误处理器】
- [一波低姿势的usaco除草记]
- Away 3d 基本属性
- poj 3468 A Simple Problem with Integers(线段树区间更新)
- 分享几个实用的Chrome扩展程序
- c/c++线性队列
- STL的注意事项
- 全排列-hdu1716