在js中要特别注意,如果是旧代码,变量的定义是使用var,使用该关键字定义变量会有两种作用域,一种是全局作用域,一种是函数作用域
1、全局作用域
if (true) { var test = true; // use "var" instead of "let" } alert(test); // true, the variable lives after if
2、函数作用域
function sayHi() { if (true) { var phrase = "Hello"; } alert(phrase); // works } sayHi(); alert(phrase); // ReferenceError: phrase is not defined
3.变量提升
特别要注意的是var会导致变量提升,总是将变量定义提升到头部执行,但是赋值却是在对应的位置执行
function sayHi() { alert(phrase); var phrase = "Hello"; } sayHi();
因为变量提升的原因,alert不好报错,但是会提示undefined