在前一节中,我们学习了通过var关键字创建变量。现在考虑一个问题,变量在脚本的任意地方都能被引用吗?
先来看一下例子:
function changeAge()
{
var age = 18;
}
console.log(age);
上面的代码在函数体内定义了一个age变量,然后试图在函数体外引用这个变量。这个脚本能正常输出age变量的值吗,我们来看一下结果:
运行结果可以看到,运行过程中发生了异常。异常的内容是:“age is not defined”,意思是age没有定义。为什么会这样?这背后的原因是什么?
JavaScript中每一个变量都有自己的作用域,在ES6标准之前,有两种作用域:
- 全局作用域
在脚本顶层即函数体外的区间,叫作全局作用域。在全局作用域内定义的变量,叫做全局变量。全局变量在代码任何地方都能被引用。 - 局部作用域
在函数内的区间,叫做局部作用域。在局部作用域内定义的变量,叫局部变量。局部变量只能在函数内被引用。
ECMAScript 6 (缩写为ES6)标准是JavaScript的语言标准,因其于2015年正式应用,因此也叫ES2015。
上述代码之所有会发生异常,是因为尝试在全局作用域中引用局部变量。
function changeAge()
{
var age = 18; // 局部变量
}
console.log(age); // 全局作用域
所以,全局作用域不能访问局部变量。那么局部作用域是否能访问全局变量呢?通一个例子来试一下:
var age = 18; // 全局变量
function changeAge()
{
console.log(age); // 局部作用域
}
changeAge()
上述代码中,尝试在局部作用域内输出全局变量。我们看一下运行结果 :
运行结果可以看到,成功输出了全局变量。所以,局部作用域可以访问全局变量。
好,这一节讲完了。恭喜你!掌握了JavaScript中非常关键的作用域概念。后续还有很多技巧需要你慢慢学习。
什么是声明提升(hoisting)?
是函数默认参数?
什么是自定义类型?
请继续关注我的课程,我将在后续课程中为大家解答上述问题。
想学计算机技术吗?需要1对1专业级导师指导吗?想要团队陪你一起进步吗?欢迎加我为好友!
我的微信
网友评论