首先我们要了解什么叫变量作用域,变量作用域通俗来说就是 变量在什么区域范围是可用的
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
网友评论