javascript 没有var,会产生什么样的影响呢?在javascript ES6之前,我们一直都是用var来声明变量的。但是,自从ES6发布以后,我们又多了let和const。那么为什么ES6要引入新的变量声明方式呢?本文将为大家深入讲解javascript没有var的相关内容。
在ES5中,var声明的变量有以下的缺点:
1. 变量提升问题
2. 容易造成全局污染
我们先来看变量提升问题。所谓变量提升,就是脚本开始运行时,js引擎会自动将所有的变量声明提升到当前作用域的顶部。例如:
console.log(a); // undefined var a = 1;以上代码不会报错,因为在变量a之前已经进行了声明提升。但是输出结果会是undefined,而不是1。这是因为虽然声明提升了,但是变量的赋值还没有执行,也就是说,在console.log(a)时,变量a的值还没有被赋值。 而使用let和const声明变量则没有变量提升问题。例如:
console.log(a); // ReferenceError: a is not defined let a = 1;以上代码会抛出错误,因为声明提升机制对于let和const是不起作用的。在使用let和const声明变量的情况下,变量a只有在声明处开始存在,而不是在作用域的顶部。所以,在console.log(a)时,a变量还没有被声明过,所以抛出了ReferenceError。 其次,使用var声明的变量会容易造成全局污染。例如:
var name = 'Tom'; function foo() { console.log(name); }以上代码中,name变量被声明在全局作用域中,所以foo函数中也能够访问到该变量。这虽然解决了变量作用域的问题,但是如果在其他地方再次声明同名的变量,会直接覆盖原来的全局变量,进而影响全局的业务逻辑。 而使用let和const声明变量则没有这个问题。例如:
let name = 'Tom'; function foo() { console.log(name); }以上代码中,name变量只存在于其所在的块级作用域中,并不会对外部作用域造成污染。另外,如果在函数内部或者其他块级作用域中声明相同名字的变量,也不会互相影响。 因此,ES6中推出了let和const来解决上述问题,从而取代了使用var声明变量的方式。 那么,let和const有什么区别呢?let和const的区别如下: 1. const声明的变量不能被改变,一旦赋值就不能重新赋值 2. const声明的变量必须进行初始化 因此,在使用let和const时,要注意一下两点。 总体来说,javascript没有var这一说法,采用了let和const来代替。今天的讲解中,我们主要讲了var声明变量的缺点以及ES6中引入let和const的原因和区别。希望读者能够掌握这些知识,写出更加规范的javascript代码。
本文可能转载于网络公开资源,如果侵犯您的权益,请联系我们删除。
0