var,let和const的区别在于:var的变量声明在代码执行前且工作范围在当前执行的上下文中,let是允许创建一个变量但只作用在它的块里,const与let什么相似唯一的差别是const定义的变量不可更改
本篇文章主要是通过在javascript (es6) 中创建变量的方法来介绍var、 let和const之间的区别,具有一定的参考作用,希望对大家有所帮助。
【推荐课程:javascript教程】
var vs let
var和let之间的主要区别不是使用函数作用域,而是使用块作用域。 这意味着使用let关键字创建的变量在创建它的“块”内以及任何嵌套块中都可用。
例
function discountprices (prices, discount) { var a = [] for (var i = 0; i < prices.length; i++) { var discountedprice = prices[i] * (1 - discount) var finalprice = math.round(discountedprice * 100) / 100 a.push(finalprice) } console.log(i) // 3 console.log(discountedprice) // 150 console.log(finalprice) // 150 return a }
在上面的例子中之所以能够在for循环之外使用i,discountedprice和finalprice,是因为它们是用var声明的,而var是函数作用域。如果我们将var换成let会发生什么情况呢?
function discountprices (prices, discount) { let a = [] for (let i = 0; i < prices.length; i++) { let discountedprice = prices[i] * (1 - discount) let finalprice = math.round(discountedprice * 100) / 100 a.push(finalprice) } console.log(i) // 3 console.log(discountedprice) // 150 console.log(finalprice) // 150 return a } discountprices([100, 200, 300], .5) // 这儿会报错i未定义
这个案例告诉我们的是,使用let声明的变量是块作用域,而不是函数作用域。 因此在“块”之外访问i(或discountedprice或finalprice)都会报错
下一个区别与变量提升有关。提升的定义是“javascript解释器会在所谓的'创建'阶段将变量声明赋值为undefined的默认值。
例:
function discountprices (prices, discount) { console.log(discounted) // undefined var a = [] for (var i = 0; i < prices.length; i++) { var discountedprice = prices[i] * (1 - discount) var finalprice = math.round(discountedprice * 100) / 100 a.push(finalprice) } console.log(i) // 3 console.log(discountedprice) // 150 console.log(finalprice) // 150 return a}
如果想要在声明变量之前使用let声明的变量,而不是未定义(如使用var声明的那些变量),程序将会报错
function discountprices (prices, discount) { console.log(discounted) // 错误 let a = [] for (let i = 0; i < prices.length; i++) { let discountedprice = prices[i] * (1 - discount) let finalprice = math.round(discountedprice * 100) / 100 a.push(finalprice) } console.log(i) // 3 console.log(discountedprice) // 150 console.log(finalprice) // 150 return a}
结论是
var:变量声明在代码执行之前被处理,它的作用范围在其当前执行的上下文中
let:let语句允许我们创建一个变量,其范围仅限于使用它的块里。
let vs const
既然已经理解了var和let之间的区别,那么const呢? 事实证明,const与let几乎完全相同。 但是唯一的区别是,一旦使用const为变量赋值,就无法将其重新赋值给新值。
let name = 'tyler'const handle = 'tylermcginnis'name = 'tyler mcginnis' //正确handle = '@tylermcginnis' //错误
从上面的内容可以看出用let声明的变量可以重新赋值,但用const声明的变量不能。所以只要你想要一个变量是不可变的,你可以用const声明它。但是用const声明变量并不意味着它是不可变的,只是无法重新赋值,例:
const person = { name: 'kim kardashian' }person.name = 'kim kardashian west' // 正确person = {} // 错误
因此即使使用const声明对象,也不意味着不能改变其任何属性。 它只表示无法将其重新分配给新值
总结:以上就是本篇文章的全部内容了,希望对大家有所帮助。
以上就是javascript中var,let与const之间有什么区别的详细内容。