首页 > 解决方案 > 如何使用匿名函数在 Javascript 中仅使某些函数和变量全局可用?

问题描述

假设我有一个具有结构的 html 文件

<script>

let firstClass = new FirstClass();

var secret = 'code';

function FirstClass() {
    this.init = function () {
        console.log(SecondClass());
    }
}

function SecondClass() {
    return 'value';
}

</script>

// some html

<script>
    firstClass.init(); // should return a value
    console.log(secret); // should be undefined
    SecondClass(); // should not be accessible
    FirstClass(); // should not be accessible
</script>

我如何确保只有firstClass.init()的第二部分可用<script>而不可用SecondClass()

我想使用匿名函数,比如;function({})();

标签: javascriptanonymous-function

解决方案


FirstClass在包含、SecondClass和的 IIFE 中实例化 firstClass secret,并且仅从 IIFE 返回firstClass

<script>
  const firstClass = (() => {
    const secret = 'secret';
    function FirstClass() {
      this.init = function() {
        console.log(SecondClass());
      }
    }

    function SecondClass() {
      return 'value';
    }
    return new FirstClass;
  })();
</script>


<script>
  firstClass.init(); // should return a value
  console.log(
    typeof secret,
    typeof SecondClass,
    typeof FirstClass
  );
</script>

请注意,您需要使用</script>,而不是<scipt>,并且new在调用构造函数时需要使用 ,以便使用构造函数中分配给的属性this


推荐阅读