Skip to content

声明及初始化 ​

本节目标:理解“声明及初始化”的核心思路,并能把它用于实际开发或面试表达。

说明:原 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;

本站总访问 — 次