var 为什么会被let const 替代

1.变量提升是指在子块中定义的变量,在某些特殊情况下(比如说上文提到的for循环就是一个子块),其作用域扩大到了父块的范围内(doSomething是一个父块),有些文章也会把他称作“变量泄漏”,是一个概念。

2.var定义变量的作用域是函数作用域,并非块级作用域(ES5没有块级作用域的概念),变量是很容易被提升的,一旦将其提升了,就会超出离他最近的方法外,暂时发现的变量提升的方法有:for循环、函数内外定义同名变量

var name ='dkvirus'

function test () {

console.log(name)

var name = 'hello'

}

test()//undifined

此时test()内的变量name=''hello'提升了,作用域范围变成了全局,将变量name =‘dkvirus’覆盖,所以显示undifined,如果用let的话,会报错变量name未initialization,而不是undifined

猜你喜欢

转载自www.cnblogs.com/chengqiaoli/p/12039065.html