变量声明var,let.const使用有哪些区别
var声明变量的作用域限制在其声明位置的上下文中var x = 0; // x是全局变量,并且赋值为0。console.log(typeof z); // undefined,因为z还不存在。
区别 : var可以先使用,后声明;let必须先声明后使用。暂时性死区:只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域, 不再受外部的影响。
let对比var都是变量(var没有变量常量一说,但ES5之后其行为与let类似),但是,var和let有很大区别,简单理解就是作用域变了,使用变量需要先声明在赋值后使用的流程。
在JavaScript中有三种声明变量的方式:var、let、const。 var:声明全局变量,换句话理解就是,声明在for循环中的变量,跳出for循环同样可以使用。
var、function、let、const变量提升
首先纠正下,文章标题里的 “变量提升” 名词是随大流叫法,“变量提升” 改为 “标识符提升” 更准确。因为变量一般指使用 var 声明的标识符,JS 里使用 function 声明的标识符也存在提升(Hoisting)。
之前我们说过,“在JavaScript中,刚创建的变量会被初始化为undefined”。事实证明,这就是“变量提升”。JavaScript解释器将在所谓的“创建”阶段为声明的变量分配默认值undefined。var、let和const 我们先来比较var和let。
申明了变量并赋值,但是在程序运行时还没加载到第10行的时候,变量就被申明,但是到第10行的时候变量才被赋值。这个就是变量提升。
function a() { // 当a被调用时, var y = 2; // y被声明成函数a作用域的变量,然后赋值成2。
这是因为,变量提升时,只提升了声明,并没有提升赋值。
这种变量提升机制在开发时会给我们造成很多的困扰,ECMAScript 6引入了let声明,用法与var相同,不过用let声明的变量不会被提升,可以把变量的作用域限制在当前代码块中。使用let声明变量,还可以防止变量的重复声明。
var、let、const三者之间的区别和联系有哪些?
1、简单来说,var的作用域是混乱的,同父子作用域下var可以被多次定义。
2、var声明变量的作用域限制在其声明位置的上下文中var x = 0; // x是全局变量,并且赋值为0。console.log(typeof z); // undefined,因为z还不存在。
3、var和let是JavaScript中两个常见的声明变量的方式,它们的区别主要体现在作用域、重复声明、全局对象属性上。在作用域上 在函数内部声明的var变量具有函数级作用域,而let变量则具有块级作用域。
4、不允许变量提升,也就是说,先使用,再初始化,这个会报错,也不允许重定义。var的话,其是函数作用域的,其值修改,允许变量提升,也允许多次重定义。
5、i++) {console.log(i);}let x=i*i;因为它的作用域仅限于在for循环内,所以外部未声明不可使用。const关键字新的const关键字可以声明一个只读的常量,也称为不可变变量,声明以后我们无法重新分配新的内容。