JavaScript函数之作用域

作者: 微语博客 | 来源:发表于2021-07-26 00:27 被阅读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
    }
    

    相关文章

      网友评论

        本文标题:JavaScript函数之作用域

        本文链接:https://www.haomeiwen.com/subject/iurwmltx.html