我最近在JavaScript中遇到了const关键字。据我所知,它是用来创建不可变变量的,我已经测试了,以确保它不能被重新定义(在Node.js中):
const x = 'const';
const x = 'not-const';
// Will give an error: 'constant 'x' has already been defined'
我意识到它还没有在所有浏览器上标准化——但我只对Node.js V8的环境感兴趣,我注意到某些开发人员/项目似乎非常喜欢它,当var关键字可以用于同样的效果时。
什么时候用const代替var比较合适?
它是否应该被用在每一个不存在的变量上
重新分配是声明的?
如果用var来代替,会有什么不同吗
Const还是反之?
2017年更新
这个答案仍然受到很多关注。值得注意的是,这个答案是在2014年初发布的,从那时起发生了很多变化。Ecmascript-6支持现在是标准。所有现代浏览器现在都支持const,所以使用它应该非常安全,没有任何问题。
2014年原创答案
尽管有相当不错的浏览器支持,但我现在还是避免使用它。来自MDN关于const的文章:
const的当前实现是mozilla特定的扩展,不是ECMAScript 5的一部分。它在Firefox和Chrome (V8)中得到支持。从Safari 5.1.7和Opera 12.00开始,如果在这些浏览器中使用const定义变量,以后仍然可以更改它的值。Internet Explorer 6-10不支持,但Internet Explorer 11支持。const关键字当前在函数作用域中声明常量(就像用var声明变量一样)。
它接着说:
const将由ECMAScript 6定义,但具有不同的语义。与使用let语句声明的变量类似,使用const声明的常量将被块作用域化。
如果你确实使用了const,你将不得不添加一个变通方法来支持稍微老一点的浏览器。
你回答得很好,但还是简单点吧。
当你有一个定义的常量时,应该使用Const(理解为:它在程序执行期间不会改变)。
例如:
const pi = 3.1415926535
如果你认为这是在以后的执行中可能会改变的东西,那么就使用var。
根据这个例子,实际的区别是,使用const时,你总是假设pi将是3.14[…],这是事实。
如果你把它定义为一个变量,它可能是3.14[…]或者不是。
从更专业的角度来说,Tibos的理论在学术上是正确的。
你的问题有两个方面:使用const而不是var的技术方面是什么,以及这样做与人有关的方面是什么。
技术上的差异是显著的。在编译语言中,常量将在编译时被替换,它的使用将允许其他优化,如删除死代码,以进一步提高代码的运行时效率。最近(使用较少的术语)JavaScript引擎实际上编译JS代码以获得更好的性能,因此使用const关键字将通知它们上述优化是可能的并且应该完成。这将导致更好的性能。
The human-related aspect is about the semantics of the keyword. A variable is a data structure that contains information that is expected to change. A constant is a data structure that contains information that will never change. If there is room for error, var should always be used. However, not all information that never changes in the lifetime of a program needs to be declared with const. If under different circumstances the information should change, use var to indicate that, even if the actual change doesn't appear in your code.