Appearance
声明及初始化
本节目标:理解“声明及初始化”的核心思路,并能把它用于实际开发或面试表达。
说明:原 OneNote 中有图片引用,但图片未包含在导出目录中;本页保留了可用的文字与代码内容。
**声明**使用var,let 后跟变量名(即一个标识符),声明一个变量;使用const 后跟常量名(也是一个标识符,一般全大写)声明一个常量,如:
var message;可以使用一条语句定义多个变量,变量之间用逗号分隔。在全局中声明的变量是全局作用域的变量,在函数中定义变量是函数作用域中的变量。
**区别**
var声明的变量:变量提升:会变量提升,不管if条件是否成立,if条件语句里的变量都会提前声明;
重复声明:可被多次声明,但后面的声明会被忽略,只会做赋值处理;
let声明的变量let不存在声明提升(更符合变量先声明再使用的规范);不允许重复声明,重复声明会报错;块级作用域:let声明的变量只在声明时的代码块内有效(具有块级作用域),它与父级作用域中的同名变量互不影响;
存在暂时性死区,如果在变量声明前使用,会报错;在变量的声明语句之前调用typeof 也会报错;而直接typeof未声明变量不会报错,返回undefined;
typeof a; // 报错
let a = 1;声明函数
- 用
function定义的函数会提前声明,并且定义;
**初始化**给变量赋值叫初始化。只声明,未初始化的变量的值为undefined。typeof 未声明变量 不会报错,返回'undefined';对未经声明的变量调用delete不会导致错误,但无意义,而且在严格模式下报错。
**不使用****var,let,const****声明变量,直接定义(初始化)**
操作不会报错,但不推荐。理由如下:全局作用域中定义的全局变量很难维护;严格模式下会导致抛出ReferenceError错误;**使用或不使用****var,let,const****声明变量的区别**不使用var,let,const定义的全局变量configurable为true;而使用var定义的全局变量,configurable为false;