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}
完。