在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。根据访问范围的不同,作用域可分为全局作用域和局部作用域。全局作用域的变量在JS程序中的任何位置都可访问,局部作用域有函数作用域,块级作用域和循环作用域等,本文将对函数作用域作个基本介绍。
局部作用域
变量在函数内声明,变量为局部作用域。局部变量:只能在函数内部访问。
首先我们先创建一个函数,使用var关键字定义一个局部变量,在不同作用域访问,看看会发生什么。
function myFun() {
var num = 10;
console.log(num);//10
}
myFun();
console.log(num);//undefined
在函数外部访问函数内部定义的变量是报错了,错误类型是变量未定义,所以函数内部形成了局部作用域。
访问函数作用域
我们知道了函数内部会形成一个封闭的作用域,如果要访问局部变量呢,很简单粗暴的方法就是返回变量。
function getNum() {
var num = 10;
console.log(num);//10
return num;//返回局部
}
getNum();
console.log(getNum());//10
使用return关键字可以返回函数需要返回的值,在函数调用执行时返回。
函数作用域的应用
由于ES6之前没有块级作用域,所以也可使用函数封装作用域。在上面的例子中,我们访问到了函数内部变量,但是如果只是返回变量的话,也比外部定义变量强不了多少。我们可以在函数的内部返回对象和函数,因此实现功能的封装,隐藏实现细节,调用即可。
function getNum() {
var obj = {
"num" : 10
}
console.log(obj.num);//10
return obj;
}
getNum();
console.log(getNum().num);//10
或者返回对象方法
function getGreet() {
var obj = {
"greet" : function (){
console.log("hello world");
}
}
obj.greet();//hello world
return obj;
}
getGreet();
console.log(getGreet().greet());//hello world
嵌套函数作用域
嵌套函数对局部变量的访问也遵从上面的原则,外面的访问不到里面的,访问也需要将值返回,这样也可以嵌套多层。
function myFun(n) {
var num = 10;
function inFun(){
var num2 = 20;
console.log(num);//10
}
console.log(num2);//undefined
}
网友评论