javascript - 如何使用匿名函数使某些函数和变量在 Javascript 中全局可用?

标签 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({})();

最佳答案

在包含 FirstClass 的 IIFE 中实例化 firstClass , SecondClass , 和 secret , 并且只返回 firstClass来自 IIFE:

<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 的属性时在构造函数中。

关于javascript - 如何使用匿名函数使某些函数和变量在 Javascript 中全局可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55969024/

相关文章:

scala - 如何在链接部分函数时避免 `missing type` 错误

matlab - 如何以字符串形式安全地操作 MATLAB 匿名函数

java - 匿名函数内的回调,未正确获取语法

c# - Action/delegate 可以更改它的参数值吗?

javascript - 在div中水平和垂直对齐图像

javascript - 防止动画进行时多次点击(stopPropagation & :animated)

javascript - 如何在 node.js 中使用 pdfkit 创建带有项目符号列表的文本?

javascript - 是否有另一种语言,如 javascript?

javascript - 在一个 cookie 中设置两个值

javascript - document.body 与 Document.prototype.body