var变量提升以及let,const区别

2020-09-08  本文已影响0人  黑白说程序

首先我们要了解什么叫变量作用域,变量作用域通俗来说就是 变量在什么区域范围是可用的 

var和let的三大区别

①:var在if和for里面没有块级作用域,var是有全局作用域和函数作用域的,let有全局作用域和块级作用域

②:var是可以重复定义 var a=1 ; var a=3  而let是不可以的

③:var是可以i变量提升

通常打开网页时,浏览器会先分析一遍js,会对里面的var进行变量提升,例如

console.log(web)  //输出underfined 

var web='hello'

为什么会输出underfined,是因为上面的代码其实相当于

var web

console.log(web)  //输出underfined 

var web='hello'

这里其实可以引申到null和underfined的区别了:

注意:只定义变量名没有赋值,或者没有定义变量 检测类型都是返回underfined。但是如果直接使用未定义的变量会控制台会报错

但是上面的例子为什么不是因为没有定义变量 才返回underfined呢

那是因为我们可以用下面的例子说明

var web='hello'

console.log(web)  //输出underfined 

var class=‘world’

因为我在这里用class关键字去做一个变量,就会报错,他不会先执行上面的代码在报错,而是直接报错

let定义变量,let不存在变量提升

console.log(web)  // 控制台会报错,因为let不存在变量提升

let web='hello'

const定义常量,他的意思就是 指向一块内存地址,不可以在改变地址,因此在定义对象赋值给一个const常量,可以改变对象里面的值,这是因为对象的地址没有变,修改的一直是这个地址内的区域,例如

const a={}

a.url="www.baidu.com"

a.name='world'

console.log(a); //这里就是因为对象的地址没有改变,改变的这个地址区域里的内容

var定义的变量都是在window对象下的例如var web='网页' 那么可以用window.web去调用,但是用let定义的变量 是不存在在window对象下的 不可以调用的。例如:

var web='hello'

window.web //直接打印出web的值hello

let num=‘99’

window.num //这样返回的是underfined

上一篇 下一篇

猜你喜欢

热点阅读