065_const关键字

1. const定义的变量与let类似, 但不能重新赋值:

const PI = 3.141592653589793;
PI = 3.14;      // 会出错
PI = PI + 10;   // 也会出错

2. 在声明时赋值

2.1. JavaScript const变量必须在声明时赋值:

// 不正确
const PI;
PI = 3.14159265359;
// 正确
const PI = 3.14159265359;

3. 常量对象可以更改

3.1. 您可以更改常量对象的属性:

const mobile = {name: 'huawei', color: 'white'};
mobile.color = 'black'; // 更改属性
mobile.id = 1001; // 添加属性

3.2. 但是您无法重新为常量对象赋值:

const mobile = {name: 'huawei', color: 'white'};
mobile = {}; // 报错, 无法重新赋值

4. 常量数组可以更改

4.1. 您可以更改常量数组的元素:

const books = ['java编程思想', 'java编程语言'];
books[1] = 'java编程语言(第三版)'; // 更改元素
books.push('java核心技术'); // 添加元素

4.2. 但是您无法重新为常量数组赋值:

const books = ['java编程思想', 'java编程语言'];
// books = []; // 报错, 无法重新赋值

5. 块作用域

5.1. 可以使用const关键字声明拥有块作用域的变量(和let关键字一样)。

5.2. const 在块{}内声明的变量无法从块外访问。

5.3. 实例

{
	var a = 5; // 给a初始化为5
}
document.write('a = ' + a + "<br />"); // 输出a = 5

{
	let b = 10;
	// let在块内声明的变量, 只能在块内访问。
	document.write('b = ' + b + "<br />"); // 输出b = 10
}
// 块外不能访问b, 访问b, 报错

{
	const c = 15;
	// const在块内声明的变量, 只能在块内访问。
	document.write('c = ' + c + "<br />"); // 输出c = 15
}
// 块外不能访问c, 访问c, 报错

6. 循环作用域

6.1. 循环中使用const声明的变量, 在循环外不能访问(和let关键字一样)。

for(var i = 1; i <= 3; i++){
	document.write('i = ' + i + "<br />");
}
document.write('i = ' + i + "<br />"); // 输出i = 4
document.write('i = ' + window.i + "<br />"); // 输出i = 4

var obj = {id: 1001, name: 'zs'};
for(var item in obj){
	document.write('item = ' + item + "<br />");
}
document.write('item = ' + item + "<br />"); // 输出item = name
document.write('item = ' + window.item + "<br />"); // 输出item = name

for(let j = 1; j <= 3; j++){
	document.write('j = ' + j + "<br />");
}
// 不能访问j

for(let key in obj){
	document.write('key = ' + key + "<br />");
}
// 不能访问key		

// 这里有k++, const定义的变量必须初始化, 而且不能改变, 因此并不适用于定义for循环的变量。但是for循环体外不能访问const定义的变量。
// for(const k = 1; k <= 3; k++){
// 	document.write('k = ' + k + "<br />");
// }
for(const k = 1; k <= 3;){
	document.write('k = ' + k + "<br />");
	break;
}

for(const key in obj){
	document.write('key = ' + key + "<br />");
}
// 不能访问key

7. 函数作用域

7.1. 在函数内声明变量时, 使用var、let和const很相似。它们都有函数作用域:

function myFunction1() {
	var bookName = "Effective Java";   // 函数作用域
	document.write('bookName = ' + bookName + "<br />"); // bookName = Effective Java
}
myFunction1();
// document.write('bookName = ' + bookName + "<br />"); // 访问bookName会报错
function myFunction2() {
	let mobileName = "huawei";   // 函数作用域
	document.write('mobileName = ' + mobileName + "<br />"); // mobileName = huawei
}
myFunction2();
// document.write('mobileName = ' + mobileName + "<br />"); // 访问mobileName会报错	
function myFunction3() {
	const computerName = "联想";   // 函数作用域
	document.write('computerName = ' + computerName + "<br />"); // computerName = 联想
}
myFunction3();
// document.write('computerName = ' + computerName + "<br />"); // 访问computerName会报错

8. 全局作用域

8.1. 如果在块外声明声明, 那么var、let和const也很相似。它们都拥有全局作用域:

var d = 20;       // 全局作用域
let e = 25;       // 全局作用域
const f = 30;       // 全局作用域

9. html中的全局变量

9.1. 使用JavaScript的情况下, 全局作用域是JavaScript环境。

9.2. 在html中, 全局作用域是window对象。

9.3. 通过var关键词定义的全局变量属于window对象。

9.4. 通过const关键词定义的全局变量不属于window对象, 属于JavaScript环境(和let关键字一样):

var d = 20;
document.write('d = ' + d + "<br />"); // d = 20
document.write('d = ' + window.d + "<br />"); // d = 20

let e = 25;
document.write('e = ' + e + "<br />"); // e = 25
document.write('e = ' + window.e + "<br />"); // e = undefined

const f = 30;
document.write('f = ' + f + "<br />"); // f = 30
document.write('f = ' + window.f + "<br />"); // f = undefined

10. 重新声明

10.1. 在相同的作用域, 通过const重新声明一个var或let变量是不允许的:

var I = 'I_01'; // 允许
let I = 'I_02'; // 不允许
function myFn01(){
	var I = 'I_01'; // 允许
	let I = 'I_02'; // 不允许
}

var II = 'II_01'; // 允许
const II = 'II_02'; // 不允许
function myFn02(){
	var II = 'II_01'; // 允许
	const II = 'II_02'; // 不允许
}

let III = 'III_01'; // 允许
const III = 'III_02'; // 不允许
function myFn02(){
	let III = 'III_01'; // 允许
	const III = 'III_02'; // 不允许
}
{
	let III = 'III_01'; // 允许
	const III = 'III_02'; // 不允许
}

10.2. 在相同的作用域, 通过var、let、const重新声明一个const变量是不允许的:

const IV = 'IV_01'; // 允许
var IV = 'IV_01'; // 不允许
function myFn03(){
	const IV = 'IV_01'; // 允许
	var IV = 'IV_01'; // 不允许
}

const V = 'V_01'; // 允许
let V = 'V_02'; // 不允许
{
	const V = 'V_01'; // 允许
	let V = 'V_02'; // 不允许
}
function myFn04(){
	const V = 'V_01'; // 允许
	let V = 'V_02'; // 不允许
}

const VI = 'VI_01'; // 允许
const VI = 'VI_02'; // 不允许
{
	const VI = 'VI_01'; // 允许
	const VI = 'VI_02'; // 不允许
}
function myFn05(){
	const VI = 'VI_01'; // 允许
	const VI = 'VI_02'; // 不允许
}

11. 例子

11.1. 代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>const关键字</title>
	</head>
	<body>
		<script type="text/javascript">
			// 不能重新赋值
			const PI = 3.141592653589793;
			// PI = 3.14;      // 会出错
			// PI = PI + 10;   // 也会出错

			const mobile = {name: 'huawei', color: 'white'};
			mobile.color = 'black'; // 更改属性
			mobile.id = 1001; // 添加属性
			// mobile = {}; // 报错, 无法重新赋值

			const books = ['java编程思想', 'java编程语言'];
			books[1] = 'java编程语言(第三版)'; // 更改元素
			books.push('java核心技术'); // 添加元素
			// books = []; // 报错, 无法重新赋值
			
			{
				var a = 5; // 给a初始化为5
			}
			document.write('a = ' + a + "<br />"); // 输出a = 5

			{
				let b = 10;
				// let在块内声明的变量, 只能在块内访问。
				document.write('b = ' + b + "<br />"); // 输出b = 10
			}
			// 块外不能访问b, 访问b, 报错

			{
				const c = 15;
				// const在块内声明的变量, 只能在块内访问。
				document.write('c = ' + c + "<br />"); // 输出c = 15
			}
			// 块外不能访问c, 访问c, 报错

			for(var i = 1; i <= 3; i++){
				document.write('i = ' + i + "<br />");
			}
			document.write('i = ' + i + "<br />"); // 输出i = 4
			document.write('i = ' + window.i + "<br />"); // 输出i = 4

			var obj = {id: 1001, name: 'zs'};
			for(var item in obj){
				document.write('item = ' + item + "<br />");
			}
			document.write('item = ' + item + "<br />"); // 输出item = name
			document.write('item = ' + window.item + "<br />"); // 输出item = name
			
			for(let j = 1; j <= 3; j++){
				document.write('j = ' + j + "<br />");
			}
			// 不能访问j
			
			for(let key in obj){
				document.write('key = ' + key + "<br />");
			}
			// 不能访问key		
			
			// 这里有k++, const定义的变量必须初始化, 而且不能改变, 因此并不适用于定义for循环的变量。但是for循环体外不能访问const定义的变量。
			// for(const k = 1; k <= 3; k++){
			// 	document.write('k = ' + k + "<br />");
			// }
			for(const k = 1; k <= 3;){
				document.write('k = ' + k + "<br />");
				break;
			}
			
			for(const key in obj){
				document.write('key = ' + key + "<br />");
			}
			// 不能访问key	
			
			function myFunction1() {
				var bookName = "Effective Java";   // 函数作用域
				document.write('bookName = ' + bookName + "<br />"); // bookName = Effective Java
			}
			myFunction1();
			// document.write('bookName = ' + bookName + "<br />"); // 访问bookName会报错
			function myFunction2() {
				let mobileName = "huawei";   // 函数作用域
				document.write('mobileName = ' + mobileName + "<br />"); // mobileName = huawei
			}
			myFunction2();
			// document.write('mobileName = ' + mobileName + "<br />"); // 访问mobileName会报错	
			function myFunction3() {
				const computerName = "联想";   // 函数作用域
				document.write('computerName = ' + computerName + "<br />"); // computerName = 联想
			}
			myFunction3();
			// document.write('computerName = ' + computerName + "<br />"); // 访问computerName会报错	

			var d = 20;
			document.write('d = ' + d + "<br />"); // d = 20
			document.write('d = ' + window.d + "<br />"); // d = 20

			let e = 25;
			document.write('e = ' + e + "<br />"); // e = 25
			document.write('e = ' + window.e + "<br />"); // e = undefined
			
			const f = 30;
			document.write('f = ' + f + "<br />"); // f = 30
			document.write('f = ' + window.f + "<br />"); // f = undefined
		</script>
	</body>
</html>

11.2. 效果图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值