什么';javascript中函数内部函数的实时使用是什么?

什么';javascript中函数内部函数的实时使用是什么?,javascript,Javascript,作为JavaScript新手,我在JavaScript中遇到了一个功能,我们可以在一个看起来很酷的函数中编写函数,但我不了解它的任何实际用途,也不知道如何调用子函数 var parent = "global"; function Parent() { alert(parent); function child() { alert("i am child"); } } 因此,在上面的示例函数中,父函数嵌入子函数,但我不确定以下两个问题: 这种语法/功能的

作为JavaScript新手,我在JavaScript中遇到了一个功能,我们可以在一个看起来很酷的函数中编写函数,但我不了解它的任何实际用途,也不知道如何调用子函数

var parent = "global";
function Parent() {
    alert(parent);

    function child() {
        alert("i am child");
    }
}
因此,在上面的示例函数中,父函数嵌入子函数,但我不确定以下两个问题:

  • 这种语法/功能的实际用途是什么

  • 如何调用子函数

  • var parent = "global";
    function Parent() {
        alert(parent);
    
        function child() {
            alert("i am child");
        }
    }
    

    这个概念主要用于OOJS(面向对象JavaScript)。考虑下面的例子:

    var Employee=function(ename,eage){
    var _name=ename;
    var _age=eage;
    this.getName=function(){return _name;};
    this.getAge=function(){return _age;};
    };
    
    var e1=new Employee("Xyz",45);
    var e2=new Employee("Abc",23);
    e1.getName(); //output=Xyz
    e1.getAge(); // output=45
    and so on ...
    

    它是一个闭包,是JavaScript中控制作用域的一种方法。在闭包内部定义的任何内容在闭包外部都不可见。只需对函数稍作修改,您就可以这样调用它:

    var parent = "global";
            function Parent(a) {
            alert(parent);
    
            function child(b) {
                alert(a + b); //child can see both a and b
            }
    
            return child;
        }
    
        parent(1)(2);
    

    这可以用来实现咖喱,这里解释了这一点

    我不确定是否有人对你的问题给出了简单的答案。在
    Parent()
    函数中定义
    child()
    函数只是定义一个“本地”函数,其范围仅限于
    Parent()
    函数的代码中。它类似于只存在于函数内部的局部变量

    所以,当你有这个:

    function Parent() {
    
        function child() {
            alert("i am child");
        }
    }
    
    您已经创建了一个名为
    child
    的新函数,可以从
    Parent()
    函数内部的代码调用该函数,如下所示:

    function Parent() {
    
        function child() {
            alert("i am child");
        }
    
        child();
    }
    
    此函数在
    Parent()
    函数中是真正的本地函数,不能从其他任何地方调用。因此,这是行不通的:

    function Parent() {
    
        function child() {
            alert("i am child");
        }
    
    }
    
    child();   // this function will be undefined
    
    以这种方式定义函数的最简单的原因就是包含可以使用它的位置,并减少潜在的名称冲突。如果不能像这样定义局部函数,那么所有函数都必须是全局函数(或某些对象上的方法),并且可能会有大量可能的名称冲突。通过这种方式,您可以在其应用的范围内定义函数,并且它们不会与在其自身范围内类似定义的任何其他函数发生潜在冲突


    当您深入使用javascript时,
    child()
    函数还可以访问其父函数的所有变量。因此,您可以这样做:

    function Parent() {
    
        var msg = "Hello!";
    
        function child() {
            alert(msg);
        }
    
        child();   // will put up an alert that says "Hello!"
    }
    
    这允许这些本地函数共享父上下文中的所有变量,而不必将它们全部传递给函数。这在使用回调时特别有用,因为它允许回调访问整个上下文,即使回调被其他代码调用。下面是一个简单的回调示例,它可以访问一些有用的状态

    function blink(elem, numTimes, duration) {
        var timer, visible = true;
    
        // callback function that is called
        function handleInterval() {
            // toggle visible state
            var val = visible ? "hidden" : "visible";
            elem.style.visibility = val;
            visible = !visible;
            --numTimes;
            if (numTimes <= 0) {
                clearInterval(timer);
            }
        }
    
        timer = setInterval(handleInterval, duration);
    }
    

    如果您只在一个地方调用这个函数,那么它实际上不需要单独声明和命名。它可以这样内联定义为匿名函数。

    两大原因是:访问封闭变量(即闭包)和限制作用域/访问。在这种情况下,
    child
    函数是无用的,因为它从未被调用过。任何有权访问函数对象的代码都可以调用它——不管它如何获得所述函数对象。(记住,JavaScript中的函数/函数对象都是“值”。)在parent()中声明的所有局部变量都可以被child()访问,而无需将它们设置为全局变量或作为参数传递@谢谢你的回复,但是我怎么能调用child函数呢。我的意思是语法是什么。@ismailbaig您不能使用提供的代码:函数没有在
    父函数范围内调用,函数对象也没有暴露在范围外。是的,我想象的情况是,他将函数作为类属性child:function(){}