<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> </body> </html> <script> /* //作用域:传统js只有两个作用域,1是全局,2是局部(函数内) console.log(a) //undefined var a //var声明变量存在变量提升,在这里声明的变量,在整个作用域,都存在 console.log(a)//undefined a=1 console.log(a)//1 // console.log(b)*/ /* var a, b = 2 //a===undefined var a, b b = 2*/ /*var name, b = '2' console.log(name) console.log(typeof name) console.log(typeof b) console.log(window)*/ // console.log(name) // name=2 // var window = { // name: 'a', // b: '2' // } /* console.log(a) //error let没有变量提升 let a console.log(a) // a=1 console.log(a)// */ /* var a=1 var a=2 console.log(a) let b=1 let b=2 console.log(b) //let 不允许重复声明*/ /* var a = 1 function add() { a++ console.log(a) //2 } add() console.log(a) //2*/ /* function add() { var a = 1 a++ console.log(a) //2 } add() console.log(a) //error*/ /* var a=3 function add() { a = 1 a++ console.log(a) //2 } add() console.log(a) //2*/ /* var a=3 function add() { var a = 1 a++ console.log(a) //2 } add() console.log(a)//3*/ /* a = 3 function add() { a++ console.log(a) // var a a = 1 console.log(a) //1 } add() console.log(a)// */ /*a = 3 function add() { a++ console.log(a) // let a a = 1 console.log(a) //1 } add() console.log(a)//*/ /*const a=1 a=2 //const 声明常量,不可被修改*/ const a=[1,2,3,4,5,6,7,8] // a[0]='a' // console.log(a) const b=[1,2,3,4,5,6,7,8] console.log(a===b) const c=a a[0]='dsafj,nmbm,jk;dsfaklj' console.log(c) console.log(a===c) const d=[] for (let i = 0; i < b.length; i++) { d[i]=b[i] } console.log(d,b===d) /********************总结**************************************/ // var 可以重复声明,存在变量提升,只有两个作用域,全局和局部(函数内),会将声明的变量挂载到window对象上,会引发一系列不可思议的错误,比如var name=1; //局部作用域内,如果没有某变量,则默认会去找外层作用域查找,如果自己这个局部作用域内,如果有let或var或const声明了此变量,则会暂时性死区,会锁定本作用域,不去外面找 </script>