JS 常量 和 变量 详解

1、常量和变量的标识符

标识符 必须是 字母 、 下划线 、 美元符号 $ 和 数字 ,但必须是 字母 、 下划线 、 美元符号 $ 开头,依然是不能以 数字 开头。

标识符 区分大小写。

2、变量声明

  1. var 声明一个变量
  2. let 声明一个块作用域中的局部变量
  3. const 声明一个常量
  4. 变量声明和初始化是可以分开的
  5. 常量必须在声明时赋值,之后不能修改
  6. var 会把变量提升到当前全局或函数作用域
  7. 变量和常量的选择:如果明确知道一个标识符定义后不再修改,应该尽量声明成 const 常量,减少被修改的风险,减少BUG

3、例子

3.1 简单声明

var a 
let b

console.log("1:", a, b)

a = 1
b = 'This-is-a-string!'

console.log("2:", a, b)

// const c  --  Missing initializer in const declaration.

const c = 100  // 常量必须在声明时赋值,之后不能修改

console.log("3:", c)

// c = 200  --  Assignment to constant variable.
Info: Start process (下午4:10:34)
1: undefined undefined
2: 1 This-is-a-string!
3: 100
Info: End process (下午4:10:34)

3.2 声明变量说明

// 只是声明,y值为 undefined
var y 

// 规范的声明并初始化,声明全局或局部变量
var x = 5

// 不规范的初始化,不推荐。 在严格模式下会产生异常。
// 在赋值之前不能引用,因为它没有声明。一旦这样赋值就是全局作用域
z = 6

3.3 变量的作用域

  1. function 是函数的定义,是一个独立的作用域,其中定义的变量在函数外不可见
  2. var a = 100 可以提升声明,也可以突破非函数的块作用域(但是无法突破函数)
  3. a = 100 隐士声明不能提升声明,在“严格模式”下会出错,但是可以把变量隐式声明为全局变量。(建议少用)
  4. let a = 100 不能提升声明,而且不能突破任何的块作用域。(推荐使用)
  5. 严格模式:使用 “use strict” ,这条语句放到函数的首行,或者 JS 脚本首行

3.3.1 函数作用域中的变量

function test() {
    a = 100
    var b = 200
    let c = 300
}

test()

console.log(a)
// console.log(b)  --  b is not defined
// console.log(c)  --  c is not defined
Info: Start process (下午4:21:58)
100
Info: End process (下午4:21:59)

3.3.2 函数中变量的作用域

if (true) {
    a = 100
    var b = 200
    let c = 300
}

console.log(a)
console.log(b)
// console.log(c)  --  c is not defined
Info: Start process (下午4:32:03)
100
200
Info: End process (下午4:32:04)

猜你喜欢

转载自blog.csdn.net/weixin_44983653/article/details/106474006