如何使用匿名函数在Javascript中仅全局提供某些函数和变量?

时间:2019-05-03 11:34:54

标签: javascript anonymous-function

假设我有一个具有以下结构的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({})();

2 个答案:

答案 0 :(得分:3)

在包含FirstClassSecondClasssecret的IIFE中实例化firstClass,并且仅从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的属性。构造函数。

答案 1 :(得分:1)

此代码段应解决您的关闭需求。

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

    const firstClass = FirstClass();

    function SecondClass() {
      return 'value';
    }

    global.firstClass = firstClass;
  })(window)
</script>
// some html

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