1).使用var定义的变量会成为包含它的函数的局部变量,;例如,在一个函数内部定义夜歌变量,即意味着该变量在函数退出时被销毁。
function test() { var msg = "hello"//局部变量 } test() console.log(msg)//出错!
2).去掉var,变量就变成了全局变量(不推荐此做法)
function test() { msg = "hello"// 全局变量 } test() console.log(msg)// hello
3).使用var声明的变量会自动提升到函数作用域顶部 (“提升”,就是把所有变量声明都拉到函数作用域顶部)
function test() { console.log(age); var age = 22; } test();//undefin
等同于
function test() { var age; console.log(age); var age = 22; } test();//undefined
1)let与var作用差不多,其最明显的区别是,let声明的是块作用域,var声明的是函数作用域。
if (true) { var age = 18 console.log(age)//18 } console.log(age)//18 if (true) { let age = 18 console.log(age)//18 } console.log(age)//ReferenceError:age 没有定义
2)let声明的变量不会再作用域中被提升
3)与var不同,let再全局作用域中声明的变量不会成为window对象的属性(var则会)
var name = ‘Jack‘ console.log(window.name)//Jack let age = 18 console.log(window.age)//undefined
1)const与let基本相同,唯一一个重要区别: 用const声明变量时必须同时初始化变量,且该变量无法被修改,也不允许重复声明。
原文:https://www.cnblogs.com/WDlong/p/14716377.html