代码改变世界

变量

2018-08-26 17:36  w**2  阅读(182)  评论(0编辑  收藏  举报

1、变量: var、 let、 const

(1)Var:ES5之前

(2)let、const:ES6新增的

(3)const声明常量,不可变的量

  eg1: const readline = require("readline-sync");

 

eg2

const number = 1;

  number = 2;

  console.log(number);

//结果报错

eg3:

let number1 = 1, number2 = 2;

 console.log(number1);

//结果为2

 

2、 变量的声明、赋值,叫做变量的初始化

 let number1;

合并写法: let number1=1,number2 = 2;

 

3、 在 Js 中,任何的变量声明了,没有赋值,都是 undefined(未定义)

 

(一)var

 1. 支持重复声明,没有赋值的重复声明,js 引擎会忽略声明

 var number = 1;

 var number = 2;

 console.log(number);

//结果为2

 

var number = 1;

 var number;

 console.log(number);

//结果为1,没有报错

 

 2. 遗漏声明(禁止)

 number = 2;  //遗漏声明的关键字

 console.log(number);

 

 3. 任意类型:变量的值可以是任意类型

 var value1 = 2, value2 = "abc", value3 = "张三";

 

 

(二)let

1、 不允许重复声明

 let a = 1;

 let a = 2;

 console.log(a);

//结果报错

 

 let a = 1;

 a = 2;

 console.log(a);

//结果为2

 

2、var 和 let 之间的差别

(1)变量提升

console.log(a);

var a = 10;

 

//结果为undefined

可以约等于:

var a;

console.log(a);

a=10;

 

想象成2个阶段:

    (1) 预解析,找到所有通过 var 声明的变量,提升 【变量的声明】 到代码顶部

    (2) 按照代码运行

    (【执行上下文】进栈压栈)

 

 console.log(a); // a is not defined

let a = 10;

//结果报错

 

2. var 声明的变量不存在块级作用域(不受{}的控制)

 

Eg1:

 let a = 10;

 {

     console.log(a);

 }

 console.log(a);

//结果10,10(全局变量)

 

 

Eg2:

{

let a =10;

console.log(a);

}

console.log(a);

//结果为10,报错