在es6之前,js是只有全局作用域与函数作用域
var n=2
function fn() {
console.log(n)
a=1
console.log(a)
var b=10
console.log(b)
}
fn() // 2, 1, 10
console.log(n)//2
console.log(a)//1
console.log(b)// b is not defined
a未定义直接赋值的变量会提升为全局变量
b在fn函数里面定义的,只在该函数下起作用,外部访问不了
if与for作用域
var i=10
function fun(){
console.log(i)
if(true){
var i=30
}
console.log(i)
}
fun() //undefinded 30
//在函数执行前,i会被提升到console.log(i)前面即
// function fun(){
// var i
// console.log(i)
// if(true){
// i=30
// }
// }
在函数执行前,i会被提升到console.log(i)前面即
console.log(i) //undefiend
for(var i=0;i<3;i++){
console.log(i) //0 1 2
}
console.log(i)//3
//for里面定义 i会被提升到全局变量中
if for里面都是一个块级作用域,但是var变量声明会直接将变量提升到全局作用域,就不存在块级作用域了,用let const就可以保留块级作用域的作用
对let 跟const不了解的可以看一下es6
竟然看到这了,麻烦给小编点个赞,小编将不懈感激嘻嘻嘻