Javascript调用嵌套函数

Edu*_*uca 32 javascript nested-function

我有以下代码:

function initValidation()
{
    // irrelevant code here
    function validate(_block){
        // code here
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么办法可以在validate()函数外面调用initValidation()函数吗?我试过调用validate()但我认为它只在父函数中可见.

Esa*_*ija 99

    function initValidation()
    {
        // irrelevant code here
        function validate(_block){
            console.log( "test", _block );
        }
    
        initValidation.validate = validate;
    }

    initValidation();
    initValidation.validate( "hello" );
    //test hello
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个答案真正回答了这个问题.谢谢! (11认同)
  • 我不明白为什么我们要调用 `initValidation();`。有人可以帮帮我吗 ? (2认同)

AmG*_*tes 17

希望你正在寻找这样的东西

function initValidation()
{
    // irrelevant code here
    this.validate = function(_block){
        // code here
    }
}

var fCall = new initValidation()
fCall.validate(param);
Run Code Online (Sandbox Code Playgroud)

这会奏效.

希望这可以解决您的问题.


Oli*_*cal 6

你可以validate从内部打电话initValidation.像这样.

function initValidation()
{
    // irrelevant code here
    function validate(_block){
        // code here
    }

    return validate(someVar);
}
Run Code Online (Sandbox Code Playgroud)

validateinitValidation因其范围而在任何外部都不可见.

编辑:这是我对解决方案的建议.

(function() {
    function validate(_block){
        // code here
    }

    function initValidation()
    {
        // irrelevant code here

        return validate(someVar);
    }

    function otherFunctions() {
        // ...
    }

    // initValidation = function
}());

// initValidation = undefined
Run Code Online (Sandbox Code Playgroud)

您的所有函数都将隐藏在函数包装器之外的任何内容中,但都可以看到彼此.

  • 不,这就是它嵌套的原因.如果要在initValidation函数之外使用它,请不要嵌套它. (3认同)