ES6中为何要提出用let和const来定义变量?使用var会有什么弊端呢?其中最关键的就是:使用var关键字声明的变量,无论其实际声明位置在何处,都会被视为声明于所在函数的顶部(如果声明不在任意函数内部,则视为在全局作用域的顶部)。这就是所谓的变量提升。
栗子如下:
function getValue(condition){ if(condition){ var value = 'blue'; return value; }else{ return null; } }
实际上当condition为false或者true时候value都被创建。在else的语句中value的值也是可以被访问的,是undefined。
ES6中引入块级声明:目的就是防止这种变量提升的现象。让声明的变量在指定的块级的作用域外无法被访问。创建形式如下:
1,在一个函数内部
2,由一对花括号包裹的代码块内部
function getValue(condition){ if(condition){ let value = 'blue'; return value; }else{ return null; } }