手机版

JS变量中var定义和无var定义的区别以及es6中的let命令和const命令

时间:2021-09-06 来源:互联网 编辑:宝哥软件园 浏览:

在我们编写js代码之前,我们都知道可以使用var来定义全局变量和局部变量,或者省略var,并且我们不会在非严格模式下报告错误,但是我们不知道两者之间的区别.

var x=1;y=4;console . log(x);//1 con sole . log(y);//4 console . log(window . x);//1 con sole . log(window . y);//4在简单的测试下,我们可以知道定义的X和Y被挂载在窗口对象上,成为窗口下的属性,这并不意味着什么.

删除x;删除y;console . log(window . x);//1 con sole . log(window . y);//未定义,再看。执行上述代码后,x属性不会被删除,y属性会被删除。这就是区别。

var定义的变量不能通过删除来删除。原因是什么?在ECMAScript 5标准中,可以通过object . getowntpropertysdescriptor()获取对象本身属性的属性信息:

console . log(object . getowntpropertysdescriptor(窗口,“x”));console . log(object . getowntpropertysdescriptor(窗口,“y”));获取以下信息:

当var不用于定义时,默认可配置变量为true,可以通过删除等命令进行操作。当var定义全局变量时,可配置变为false,这意味着它不会被delete删除。

另外,简单谈谈变量推广的问题

警报(a);//未捕获的引用错误: a未定义=100警报(b);//undefinedvar b=200;先说第二个代码。var声明的全局变量B将在js中升级,即var b=200会分解成var b;b=200在代码分析时,将使用var b;升级到前面,在内存中打开一个空间,因为没有分配B,默认是未定义的。在第一段代码中,js执行alert()函数时,由于没有var声明,变量没有升级,也没有打开内存,所以在alert期间直接报错!

在ECMAScript6标准中,一个重要的概念是JavaScript严格模式’,前面需要加上‘使用严格’;

让关注点:

1.let有一个块级作用域,而{}是一个作用域

2.在2.let的范围内没有可变促销

3.let不能在其作用域(函数作用域和块级作用域)中重复声明

第一点是:let的块级范围

请注意,以下的代码是在严格模式下执行的

设n=10if(true){让n=50} console . log(n);//10表示外部代码块不受内部代码块的影响。如果变量N由var定义,那么输出就是修改后的50。第二点是:变量推广问题

警报(a);//未捕获的引用错误: a未定义集合a=100不同的VAR和LET没有变量提升,所以上面的写法会直接报错。

第三点是:重复申报

(function(){ let lTest=' let ';var vTest=' var ' let lTest=' let changed ';//未捕获语法分析器:标识符“lTest”已经声明为var vTest=“var changed”;console . log(LTEst);console . log(vTest);})();Let不允许在同一个作用域下重复变量声明。否则也会直接报错!

常量命令

Const用于声明一个常量。一旦声明,其值就不能更改。如果您必须修改变量值,js不会报告错误,而是无声地指示失败(没有效果)

const的作用域与let相同,只在声明所在的块级作用域有效,不能像let一样重复声明。

版权声明:JS变量中var定义和无var定义的区别以及es6中的let命令和const命令是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。