var声明提升console.log(name)//potatovarname='potato';使用var声明的变量将自动提升到函数作用域的顶部functionfoo(){console.log(name);varname="potatoes";}foo()//undefined//等同于函数foo(){varname;控制台日志(名称);name="土豆";}foo();//undefinedconsole.log(name)//ReferenceErrornameisnotdefinedletname="potato";而let定义的名字不会被提升,会报ReferenceError错误;var可以重复声明同一个变量varname="tomato";varname="Watermelon";varname="Potato";console.log(name);//potato和let重复声明同一个变量会报错错误。varname="Potato";letname="Potato";console.log(name);//'name'已经声明了letname="Potato";varname="Potato";console.log(name);//不能重新声明块作用域变量'name'.var全局声明varname="potato";console.log(window.name);//potatoletage="24";console.log(window.age);//undefined使用var定义的变量会挂载到window上,成为window对象的属性,但是使用let不会。范围if(true){varname="土豆";console.log(name);}console.log(name);//Potatoes//土豆if(true){letage=24;console.log(age);}console.log(age);//24//undefined使用var声明的作用域是函数作用域,使用let声明的作用域是块作用域。
