Hướng dẫn can you call a nested function in javascript? - bạn có thể gọi một hàm lồng nhau trong javascript không?

Tôi có đoạn mã sau:

function initValidation[]
{
    // irrelevant code here
    function validate[_block]{
        // code here
    }
}

Có cách nào tôi có thể gọi hàm

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

    initValidation[];
    initValidation.validate[ "hello" ];
    //test hello
5 bên ngoài hàm
    function initValidation[]
    {
        // irrelevant code here
        function validate[_block]{
            console.log[ "test", _block ];
        }
    
        initValidation.validate = validate;
    }

    initValidation[];
    initValidation.validate[ "hello" ];
    //test hello
6 không? Tôi đã thử gọi
    function initValidation[]
    {
        // irrelevant code here
        function validate[_block]{
            console.log[ "test", _block ];
        }
    
        initValidation.validate = validate;
    }

    initValidation[];
    initValidation.validate[ "hello" ];
    //test hello
5 nhưng tôi nghĩ nó chỉ hiển thị bên trong chức năng cha.

Hỏi ngày 11 tháng 1 năm 2012 lúc 10:39Jan 11, 2012 at 10:39

Eduard Lucaeduard LucaEduard Luca

6.35716 Huy hiệu vàng79 Huy hiệu bạc135 Huy hiệu Đồng16 gold badges79 silver badges135 bronze badges

1

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

    initValidation[];
    initValidation.validate[ "hello" ];
    //test hello

Đã trả lời ngày 11 tháng 1 năm 2012 lúc 12:10Jan 11, 2012 at 12:10

EsailijaesailijaEsailija

Huy hiệu vàng 136K2323 gold badges267 silver badges319 bronze badges

6

Hy vọng rằng bạn đang tìm kiếm một cái gì đó như thế này

function initValidation[]
{
    // irrelevant code here
    this.validate = function[_block]{
        // code here
    }
}

var fCall = new initValidation[]
fCall.validate[param];

Điều này sẽ hoạt động.

Hy vọng điều này giải quyết vấn đề của bạn.

Đã trả lời ngày 11 tháng 1 năm 2012 lúc 12:25Jan 11, 2012 at 12:25

AmgatesamgatesAmGates

2.07916 Huy hiệu bạc29 Huy hiệu đồng16 silver badges29 bronze badges

Bạn có thể gọi

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

    initValidation[];
    initValidation.validate[ "hello" ];
    //test hello
8 từ trong vòng
    function initValidation[]
    {
        // irrelevant code here
        function validate[_block]{
            console.log[ "test", _block ];
        }
    
        initValidation.validate = validate;
    }

    initValidation[];
    initValidation.validate[ "hello" ];
    //test hello
9. Như thế này.

function initValidation[]
{
    // irrelevant code here
    function validate[_block]{
        // code here
    }

    return validate[someVar];
}

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

    initValidation[];
    initValidation.validate[ "hello" ];
    //test hello
8 không thể nhìn thấy bất cứ thứ gì ngoài
    function initValidation[]
    {
        // irrelevant code here
        function validate[_block]{
            console.log[ "test", _block ];
        }
    
        initValidation.validate = validate;
    }

    initValidation[];
    initValidation.validate[ "hello" ];
    //test hello
9 vì phạm vi của nó.

Chỉnh sửa: Đây là đề xuất của tôi về một giải pháp. Here's my suggestion of a solution.

[function[] {
    function validate[_block]{
        // code here
    }

    function initValidation[]
    {
        // irrelevant code here

        return validate[someVar];
    }

    function otherFunctions[] {
        // ...
    }

    // initValidation = function
}[]];

// initValidation = undefined

Tất cả các chức năng của bạn sẽ được ẩn vào bất cứ điều gì bên ngoài trình bao bọc chức năng nhưng tất cả đều có thể nhìn thấy nhau.

Đã trả lời ngày 11 tháng 1 năm 2012 lúc 10:42Jan 11, 2012 at 10:42

OlicalolicalOlical

37.7K12 Huy hiệu vàng55 Huy hiệu bạc76 Huy hiệu đồng12 gold badges55 silver badges76 bronze badges

6

Lệnh gọi này sẽ trả về tuyên bố chức năng, đó là xác thực chức năng. Vì vậy, bạn có thể gọi trực tiếp sau khi gọi đầu tiên.

function initValidation[] {
  // irrelevant code here
  return function validate[_block] {
    // code here
  }
}

initValidation[][];

Đã trả lời ngày 5 tháng 10 năm 2017 lúc 14:46Oct 5, 2017 at 14:46

Tôi biết đây là một bài viết cũ nhưng nếu bạn muốn tạo một tập hợp các phiên bản mà bạn muốn làm việc với việc sử dụng lại mã đó, bạn có thể làm điều gì đó như thế này:

"use strict";
// this is derived from several posts here on SO and ultimately John Resig
function makeClassStrict[] {
  var isInternal, instance;
  var constructor = function[args] {
    if [this instanceof constructor] {
      if [typeof this.init == "function"] {
        this.init.apply[this, isInternal ? args : arguments];
      }
    } else {
      isInternal = true;
      instance = new constructor[arguments];
      isInternal = false;
      return instance;
    }
  };
  return constructor;
}
var MyClass = makeClassStrict[];// create "class"
MyClass.prototype.init = function[employeeName, isWorking] {
  var defaultName = 'notbob';
  this.name = employeeName ? employeeName : defaultName;
  this.working = !!isWorking;
  this.internalValidate = function[] {
    return {
      "check": this.working,
      "who": this.name
    };
  };
};
MyClass.prototype.getName = function[] {
  return this.name
};
MyClass.prototype.protoValidate = function[] {
return {
      "check": this.working,
      "who": this.name
    };
};
var instanceBob = MyClass["Bob", true];// create instance
var instanceFred = MyClass["Fred", false];// create instance
var mything = instanceFred.internalValidate[];// call instance function
console.log[mything.check + ":" + mything.who];
var myBobthing = instanceBob.protoValidate[];
console.log[myBobthing.check + ":" + myBobthing.who];

Đã trả lời ngày 15 tháng 6 năm 2016 lúc 14:18Jun 15, 2016 at 14:18

Mark Schultheissmark SchultheissMark Schultheiss

31.1k11 Huy hiệu vàng69 Huy hiệu bạc96 Huy hiệu Đồng11 gold badges69 silver badges96 bronze badges

Tôi biết chủ đề này đã ở đây khá lâu nhưng tôi nghĩ rằng tôi cũng sẽ để lại 0,02 đô la của mình về cách gọi các chức năng bên trong từ bên ngoài phạm vi của họ [có thể có lợi cho ai đó].

Lưu ý rằng ở bất cứ nơi nào, một quyết định thiết kế tốt hơn nên được xem xét thay vì một số cách giải quyết hackish sẽ cắn bạn trở lại sau.a better design decision should be taken into consideration rather than some hackish workaround which will bite you back later.

Làm thế nào về việc sử dụng các biểu thức chức năng thay vì các câu lệnh chức năng và sử dụng phạm vi toàn cầu.

      var innerFn;
    
      function outerFn[] {
        innerFn = function[number] {
          return number ** 2;
        }
      }
    
      outerFn[];
      console.log[innerFn[5]];

      // if there's more complex code around and you could write this defensively

      if [typeof innerFn !== 'undefined'] {
        console.log[`we are squaring the number 5 and the result is: ${innerFn[5]}`];
      } else {
        console.log['function is undefined'];
      }

Hoặc, bạn có thể sử dụng các đóng cửa:

function outer[] {
  // initialize some parameters, do a bunch of stuff
  let x = 5, y = 10;

  function inner[] {
    // keeps references alive to all arguments and parameters in all scopes it references
    return `The arithmetic mean of the 2 numbers is: ${[x + y] / 2}`;
  }
  
  return inner;
}

innerFn = outer[]; // get a reference to the inner function which you can call from outside
console.log[innerFn[]];

Đã trả lời ngày 11 tháng 6 năm 2019 lúc 5:55Jun 11, 2019 at 5:55

Marius Mucenicumarius MucenicuMarius Mucenicu

1.4752 huy hiệu vàng15 Huy hiệu bạc25 Huy hiệu đồng2 gold badges15 silver badges25 bronze badges

Tạo một biến bên ngoài hàm cha, sau đó trong hàm cha lưu trữ chức năng yêu cầu của bạn trong biến.

Var Store;
Function blah[] {

    Function needed[] {
        #
    }

   Store = needed;
}

Tomer Shetah

8.2237 Huy hiệu vàng23 Huy hiệu bạc34 Huy hiệu đồng7 gold badges23 silver badges34 bronze badges

Đã trả lời ngày 3 tháng 10 năm 2020 lúc 22:16Oct 3, 2020 at 22:16

Là một biến thể nhỏ của câu trả lời của Esailija, tôi đã làm điều này:

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

    initValidation[];
    initValidation.validate[ "hello" ];
    //test hello
0

Vì vậy, xác thực [] hiện được chia sẻ hoàn hảo giữa createdetree [] và addnodes [], và hoàn toàn vô hình với thế giới bên ngoài.

Đã trả lời ngày 3 tháng 1 năm 2021 lúc 15:04Jan 3, 2021 at 15:04

Pete Lomaxpete LomaxPete Lomax

731 Huy hiệu bạc8 Huy hiệu đồng1 silver badge8 bronze badges

Nên làm việc.

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

    initValidation[];
    initValidation.validate[ "hello" ];
    //test hello
1

Đã trả lời ngày 11 tháng 1 năm 2012 lúc 10:42Jan 11, 2012 at 10:42

OlicalolicalCarl Bergquist

37.7K12 Huy hiệu vàng55 Huy hiệu bạc76 Huy hiệu đồng2 gold badges24 silver badges42 bronze badges

7

Lệnh gọi này sẽ trả về tuyên bố chức năng, đó là xác thực chức năng. Vì vậy, bạn có thể gọi trực tiếp sau khi gọi đầu tiên.

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

    initValidation[];
    initValidation.validate[ "hello" ];
    //test hello
2

Đã trả lời ngày 5 tháng 10 năm 2017 lúc 14:46

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

    initValidation[];
    initValidation.validate[ "hello" ];
    //test hello
3

Tôi biết đây là một bài viết cũ nhưng nếu bạn muốn tạo một tập hợp các phiên bản mà bạn muốn làm việc với việc sử dụng lại mã đó, bạn có thể làm điều gì đó như thế này:

Đã trả lời ngày 15 tháng 6 năm 2016 lúc 14:181 gold badge24 silver badges44 bronze badges

Mark Schultheissmark SchultheissFeb 14, 2020 at 10:25

31.1k11 Huy hiệu vàng69 Huy hiệu bạc96 Huy hiệu ĐồngShraddha J

Tôi biết chủ đề này đã ở đây khá lâu nhưng tôi nghĩ rằng tôi cũng sẽ để lại 0,02 đô la của mình về cách gọi các chức năng bên trong từ bên ngoài phạm vi của họ [có thể có lợi cho ai đó].9 silver badges16 bronze badges

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

    initValidation[];
    initValidation.validate[ "hello" ];
    //test hello
4

Lưu ý rằng ở bất cứ nơi nào, một quyết định thiết kế tốt hơn nên được xem xét thay vì một số cách giải quyết hackish sẽ cắn bạn trở lại sau.

Làm thế nào về việc sử dụng các biểu thức chức năng thay vì các câu lệnh chức năng và sử dụng phạm vi toàn cầu.22 gold badges71 silver badges93 bronze badges

Hoặc, bạn có thể sử dụng các đóng cửa:Dec 21, 2020 at 15:13

1

Chúng ta có thể sử dụng chức năng lồng nhau trong JavaScript không?

JavaScript cho phép làm tổ của các hàm và cấp cho hàm bên trong truy cập đầy đủ cho tất cả các biến và hàm được xác định bên trong hàm bên ngoài [và tất cả các biến và hàm khác mà hàm bên ngoài có quyền truy cập]. and grants the inner function full access to all the variables and functions defined inside the outer function [and all other variables and functions that the outer function has access to].

Làm thế nào để bạn gọi các chức năng lồng nhau?

Approach:..
Viết một chức năng bên trong một hàm khác ..
Thực hiện cuộc gọi đến hàm bên trong trong câu lệnh trả về của hàm bên ngoài ..
Gọi nó là niềm vui [a] [b] trong đó A là tham số ở bên ngoài và B là hàm bên trong ..
Cuối cùng trả về đầu ra kết hợp từ chức năng lồng nhau ..

Bạn có thể gọi một hàm trong hàm javascript không?

Gọi một chức năng từ bên trong được gọi là đệ quy và câu trả lời đơn giản là, vâng. and the simple answer is, yes.

Làm cách nào để gọi một hàm lồng nhau trong React JS?

Bạn có thể gọi nó bằng Function2 [] trong ES6.using function2[] in ES6 .

Bài Viết Liên Quan

Chủ Đề