1、var定义的全局变量可被后面定义的相同名称的变量覆盖,可以重复声明,而let、const不会,不能重复声明
var a = 1 var a = 2 console.log(a) // 2 let b = 1 let b = 2 console.log(b) // 报错 Uncaught SyntaxError: Identifier 'b' has already been declared b 已经被声明 const c = 1 const c = 2 console.log(c) // 报错 Uncaught SyntaxError: Identifier 'c' has already been declared c 已经被声明
2、var 有变量提升,let、const 必须先声明再使用
console.log(a) var a = 1 // undefined // 等同于 var a console.log(a) var a = 1 console.log(b) let b = 1 // 报错 Uncaught ReferenceError: Cannot access 'b' before initialization console.log(c) const c = 1 // 报错 Uncaught ReferenceError: Cannot access 'c' before initialization
3、var 在函数作用域中有效,let、const只在所处的作用域中有效
for(var y = 0;y<10;y++){} console.log(y)// 10 for(let i = 0;i<10;i++){} console.log(i)//i is not defined
4、let 声明的变量可以更改变量值,const声明的变量值不能更改
5、题外:在函数内外使用的var
var name = 'world'; function changeName(){ console.log('函数的 '+name) //如果函数内部没有变量name 那么打印的name是 world,因为会从外部找。如果内部声明了name,那么打印的是undefined,因为内部声明了变量,变量提升 var name = 'lili' console.log(name)//lili // 总结:函数内部声明的变量名与外部全局变量名相同时,内部声明的变量只能在函数内部生效,与外部全局变量无关,互不影响。 } changeName() console.log(name);//world 没改变 (function(){ console.log('匿名函数的 '+name) // undefined 是因为函数内部声明了name 如果没有var name = 'Jun' 将打印 world if(typeof name === 'undefined'){ var name = 'Jun' console.log('hello ' + name) }else{ console.log('去死吧' + name) } })()// 打印出来是 lello Jun console.log(name) // word 因为外部的变量不会因为函数内部重新声明的变量而改变 //js 中代码的运行会先检查、装载,即声明变量、函数等操作,然后再进入执行阶段,变量赋值属于执行阶段, //匿名函数自执行会在声明后直接执行
标签:const,log,let,var,console,name From: https://www.cnblogs.com/Luffy-RedRoc/p/16598080.html