背景
在javaScript中,定义变量是一个非常常见的操作,在Es5中,通常使用var定义声明变量,而在Es6中新增了let和const关键字,也是用于声明定义变量
那究竟在什么样的情况下使用它们,解决自己开发过程当中定义变量的一些困扰...tmp,事实上,函数f无论如何变量tmp都会被创建,在预编译阶段,javaScript引擎会将上面的f函数修改成下面这样
函数f执行后,输出结果为undefined,原因就是在于,当使用函数声明时,变量会提升到运行坏境的顶部...,但是循环结束后,它并没有消失,释放,而是泄露成了全局变量,这样会造成全局变量的污染
解决办法:
若使用let定义变量,则变量不会被提升置作用域顶部,它只会在它定义的块级作用域内生效
注意事项
使用let...Bug
如果希望在全局对象下定义变量,可以使用var
总结
块级作用域绑定的let,const为javaScript引入了词法作用域,使用它们声明变量不会提升,而且只可以在声明这些变量的代码块种使用
使用...let,const也能够节省内存空间,不会造成全局变量的污染,必须的得前置声明赋值,然后才能使用(暂存性死区)
对于变化的变量,则使用let,而不改变的定义变量,使用const声明,如:for循环体中,