前端开发那些事儿JavaScript入门教程前端入门教程

JavaScript函数之作用域

2021-07-26  本文已影响0人  微语博客

在 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
}
上一篇下一篇

猜你喜欢

热点阅读