簡體   English   中英

是否可以在JavaScript中使用內部函數?

[英]Is it possible to use inner functions in JavaScript?

如何訪問我的y()函數?

function x() {
    function y() {
        return 1;
    }
}

有可能嗎?

它的范圍是x ,有點像:

function x() {
    var y;
}

所以,是的,從x內,否則沒有。

如果你想要它,你可以在x上創建它作為屬性:

var x = (function () {
    function x() {
        …
    }

    function y() {
        …
    }

    x.y = y;

    return x;
})();

你的意思是從函數x外部訪問它?

這是不可能的,當x沒有運行時,函數y不存在。 它在x內部聲明,因此只能在x內部訪問。

要使它在x外部可訪問,您需要在函數外部公開對它的引用。 如果公開對它的引用,它將在函數結束后存活。 例如:

function x() {
  function y() {
    return 1;
  }
  return y;
}

// get the reference to y
var f = x();
// call y
f();

你可以得到只有X功能的范圍內訪問您的y功能。 但是,如果從x函數返回y函數或將其分配給全局變量或x函數之外的變量,則可以訪問y函數。 這也知道是閉包 ,你的y函數會將內存中的引用保留在它傳遞給它的范圍內。

function x() {
    var anotherNum= 2;
    function y() {
        return 1 + anotherNum;
    }

    return y;
}

現在你可以得到y函數以及它所創建的作用域。請注意,它將在x函數中創建的計算中使用anotherNum。

var yFunc = x();
console.log(yFunc()) // will print 3

一種方法是將其退出范圍

function x() {
    function y() {
        return 1;
    }
    return { 
        y:y         
    };
}

每當調用x()時,它都會返回一個函數為y的對象作為成員

var a = x();
a.y();  //this returns 1

這類似於此處描述的揭示模塊模式: https//developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures?redloclale = en-US&redirectslug = JavaScript%2FGuide%2FClosures

閱讀閉包也很好: https//developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures? redloclale = en-US redirectslug = JavaScript%2FGuide% 2FClosures

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM