JavaScript快速入门笔记(3):常量和变量

本系列随笔是本人的学习笔记,初学阶段难免会有理解不当之处,错误之处恳请指正。转载请注明出处:https://www.cnblogs.com/itwhite/p/12218012.html

常量

各种数据类型都有相应的字面值常量:

  • 数字字面值常量,例如:123, 3.14
  • 字符串字面值(使用单引号或双引号都可以),例如:'foo', "bar"

  • Boolean 字面值,仅包括两个值:true 和 false

  • undefined
  • null
  • 数组字面值常量,例如:[1, 2, 3]
  • 对象字面值常量,例如:{ name: "Jack", age: 23 }

使用 const 声明常量请参考后面“ES6更新”一节。 

变量声明

使用 var 关键字声明变量,例如:

var x, y;
var a = 123, b = 'foo';

未初始化的变量,其默认值为 undefined 。

变量的作用域

变量的作用域分为:

  • 局部变量:声明在函数中的变量,只能在函数中使用;

  • 全局变量:声明在函数外的变量。另外,函数中使用的未声明的变量,默认也看做全局变量,例如:

var x = 123;     // 声明全局变量
function bar() {
    console.log(x);
    z = 456;     // 未声明的变量自动当做全局变量
}
bar();           // output 123
console.log(z);  // output 456

ES6 更新

ES6 引入了 let 和 const 两个关键字用于声明变量,它们都支持块级作用域,这是与 var 最大的区别(var 声明的变量只有全局作用域和函数作用域)。

使用 let 声明变量:建议使用 let ,弃用 var

var 声明的变量会被“提升”到最前面,这就意味着在代码书写时,变量的使用可以在声明语句之前,解释器会默认给“提升”到最前面,例如:

var foo = 123;
function bar(n) {
    console.log(foo);     // 输出 undefined,因为 if 中的 foo 声明被“提升”到了函数最前面,但还没有执行赋值语句
    if (n % 2 == 0) {
        var foo = 456;
        console.log(foo); // 输出 456
    }
}
bar(2);

很多时候这都不是我们所期望的,let 的引入正是为了解决此问题,把上面示例中的 var 替换为 let ,结果就应该是我们所期望看到的了,例如:

let foo = 123;
function bar(n) {
    console.log(foo);     // 输出 123
    if (n % 2 == 0) {
        let foo = 456;
        console.log(foo); // 输出 456
    }
}
bar(2);

使用 const 声明变量

使用 const 声明变量与使用 let 声明变量类似,都支持块级作用域。

使用 const 声明的变量必须进行初始化(与C/C++不同的是:JavaScript 中 const 变量的初始化值本身不必是常量),初始化后不能对这个变量赋予别的值(即不可以修改这个变量引用的地址,引用的内容本身还是可以被修改的),例如:

const x = 123;
x = 456;        // TypeError: Assignment to constant variable.
let y = { a: 1, b: 2, c: 3 };
const z = y;
z.b = 4;        // ok
console.log(z); // {a: 1, b: 4, c: 3}

完。

原文地址:https://www.cnblogs.com/itwhite/p/12218012.html