这是我参与2022首次更文挑战的第14天,活动详情查看: 2022首次更文挑战

区分什么是局部变量,什么是全局变量,变量之间赋值后结果是什么,由于考虑到基础问题,我不会深入讲 闭包 作用域什么的,大家可以看看我下面的示例,自己思考。

首先我们看看如何在函数内修改全局变量,很简单,只需要外面有定义一个全局变量,在函数内可以直接使用该变量(全局通用),该全局变量被修改的话在哪个地方使用都会是修改后的值,无关return。

// 在函数内修改全局变量,不需要return就能修改全局变量的值
var a1 = 10;
function test1 () {
	a1 = 20;
	console.log(a1); // 20
test1();
console.log(a1); // 20
// 同样是在函数内修改全局变量,这里return返回了修改后的全局变量,结果无异
var a2 = 10;
function test2 () {
	a2 = 20;
	console.log(a2); // 20
	return a2;
test2();
console.log(a2); // 20

如果全局变量和局部变量重合呢?很简单在函数体内的话,局部变量会覆盖全局变量,而在函数外由于访问不到局部变量所以会访问到全局变量的值,因此不管函数内怎么修改,改变的始终是局部变量的值,不会影响全局变量。当然如果我们想访问到这个被修改的局部变量,可以通过return 局部变量,在外面拿到这个局部变量(闭包)。

// 全局变量和局部变量取同一个名字,则在函数体内局部变量覆盖全局变量,函数体外仍是全局变量
var a3 = 10;
function test3 () {
	var a3 = 20;
	console.log(a3); // 20
test3();
console.log(a3); // 10
// 依然是全局变量和局部变量取同一个名字,区别在于我们返回了局部变量,可以在外面使用这个局部变量(闭包)
var a4 = 10;
function test4 () {
	var a4 = 20;
	console.log(a4); // 20
	return a4;
test4();
var result = test4(); // 20
console.log(result);
console.log(a4); // 10

剩下的有关隐式声明全局变量和比较独立的例子就留待下次吧