js中let、var、const定义变量的区别
2017-07-20 10:40
826 查看
首先需要明确的是let、const、var都是用来定义变量的
在ES6之前,我们一般都用var来定义变量,例如 :
在上面的代码中,我们可以预计到第一个console输出的是1,第二个由于变量提升输出的是undefine,而不是产生ReferenceError错误,第三个输出的还是1;也就是说在函数中定义的一个变量,在函数外部仍然是可以使用的,那么我们再来看看这一段代码:
执行完后,我们会发现第一个console仍然输出了1,第二个和第三个产生了ReferenceError错误!对比之下我们会发现let的作用域比var更加严格了,有点类似于Java中的变量定义,1、必须先定义再使用,2、有着严格的作用域,变量只作用域当前隶属的代码块
在新的ES6标准中let完全可以替代var,在ES6中另外一个定义变量的关键字是 const,const 代表一个值的 常量索引 ,也就是说,变量名字在内存中的指针不能够改变,但是指向这个变量的值 可能 改变。例如:
我们创建了一个拥有常量索引的数组变量,然后添加值到这个数组中,但是并不改变它的索引,所以上面的代码完全可以运行。
但是当我们想修改索引到一个新的数组中,就会产生一个错误TypeError:
总结:
1.在 ES6 不要使用 var,用 let 或 const 代替。var 在一定程度上存在缺陷,其实在 strong mode 下使用 var 会直接报
2.var 声明的变量作用域不是块级的,会扩大变量的作用域,可能造成不必要的 shadow(变量覆盖),通常情况下都不是想要的结果。let 声明的变量作用域就更精确,离开作用域变量就销毁。const 顾名思义就是常量了。
3.let的作用范围比var有限,适用于循环这样的环境。
在ES6之前,我们一般都用var来定义变量,例如 :
function test(){ var i=1; console.log(i); console.log(j); var j=2; } test(); console.log(i);
在上面的代码中,我们可以预计到第一个console输出的是1,第二个由于变量提升输出的是undefine,而不是产生ReferenceError错误,第三个输出的还是1;也就是说在函数中定义的一个变量,在函数外部仍然是可以使用的,那么我们再来看看这一段代码:
function test(){ let i=1; console.log(i); console.log(j); let j=2; } test(); console.log(i);
执行完后,我们会发现第一个console仍然输出了1,第二个和第三个产生了ReferenceError错误!对比之下我们会发现let的作用域比var更加严格了,有点类似于Java中的变量定义,1、必须先定义再使用,2、有着严格的作用域,变量只作用域当前隶属的代码块
在新的ES6标准中let完全可以替代var,在ES6中另外一个定义变量的关键字是 const,const 代表一个值的 常量索引 ,也就是说,变量名字在内存中的指针不能够改变,但是指向这个变量的值 可能 改变。例如:
const names=[] ; names.push(“1”) ; console.log (names) ;
我们创建了一个拥有常量索引的数组变量,然后添加值到这个数组中,但是并不改变它的索引,所以上面的代码完全可以运行。
但是当我们想修改索引到一个新的数组中,就会产生一个错误TypeError:
//数组 const names = [ ] ; names=[];//Uncaught TypeError: Assignment to constant variable. //number或String const i=1; i=2;//Uncaught TypeError: Assignment to constant variable.
总结:
1.在 ES6 不要使用 var,用 let 或 const 代替。var 在一定程度上存在缺陷,其实在 strong mode 下使用 var 会直接报
SyntaxErrorhttps://docs.google.com/document/d/1Qk0qC4s_XNCLemj42FqfsRLp49nDQMZ1y7fwf5YjaI4/mobilebasic?pli=1#h.26d4x5sphhty最简单的方式就是全局替换成 let,但建议注意一下 const。let 和 const 区别并不大,const 为常量,let 为变量。我的使用方式是只要定义的不会改变就用 const,然后你会发现大部分使用的是 const。
2.var 声明的变量作用域不是块级的,会扩大变量的作用域,可能造成不必要的 shadow(变量覆盖),通常情况下都不是想要的结果。let 声明的变量作用域就更精确,离开作用域变量就销毁。const 顾名思义就是常量了。
3.let的作用范围比var有限,适用于循环这样的环境。
相关文章推荐
- JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
- js中三种定义变量的方式const, var, let的区别。
- js中三种定义变量 const, var, let 的区别
- js中定义变量的三种方式const,val,let 的区别
- js中let和var定义变量的区别
- js中let和var定义变量的区别
- js中let和var定义变量的区别
- js-变量定义关键字const,var,let
- js中let和var定义变量的区别
- js中let和var定义变量的区别
- const,let,var 定义变量的区别
- js中let和var定义变量的区别
- JS中的变量声明——var,let,const的区别
- js中let和var定义变量的区别
- ts和js中let和var定义变量的区别
- [Wondgirl]ECMAScript6(ES6)(二)变量let、var和常量const的定义和区别
- JS中三种定义变量的方式:var, let, const
- js中let和var定义变量的区别
- js中let和var定义变量的区别
- js中const、var、let的区别