javascript框架如何拥有自己的工作空间

how javascript framework have own workspace?

本文关键字:自己的 工作 空间 拥有 框架 何拥有 javascript      更新时间:2023-09-26

可能重复:
javascript创建INcode工作区(框架(

在过去的几天里,我对Javascript框架如何拥有自己的工作区很感兴趣,我的意思是,他们如何以任何想要的名称调用变量,并在不涉及局部变量的情况下使用它。

我现在正在编写一个API,并且我正面临局部变量/函数局部名称的问题,如果它们已经存在的话。

所以,我所做的是研究框架是如何工作的,我看到他们使用了这样的名称空间函数:

(function(){ .... })()

所以我试着做一些类似的事情

<html>
  <head>
    <script type="text/javascript">
      (function() {
        function f(toAlert) {  alert(toAlert);  }
      })();
    </script>
  </head>
  <body>
    <script>
      toAlert("hi");
    </script>
  </body>
</html>

但它不起作用。。

所以我有几个问题:

  1. 如何在javascript中有一个工作区来设置我想要的任何变量名(如果函数也是,那就太好了(。

  2. 我看到框架使用"window"命令,这与命名空间函数"public"函数或w/e有关吗?

  3. 如果你能给我关于这一切的信息/教程,以及如何从开始到结束,我会很高兴

当然它不起作用,因为f(toAlert)函数只在立即执行的函数闭包范围内可见。你还试图调用一些一开始就不存在的函数。您的闭包函数被称为f(并且有toAlert参数(,然后您试图调用未在任何地方定义的函数toAlert。不在全局范围内,也不在关闭范围内。

范围

这段代码可能会帮你理清思路。阅读评论。

<script type="text/javascript">
    // global scope
    function globalFunc(text) {
        alert(text);
    }
    var privateFunc = null;
    // function closure scope
    (function(){
        // closure function
        function closureFunc(text) {
            // can call global
            globalFunc(text);
        }
        // let's make closure function accessible from global scope
        // since privateFunc variable is in global scope
        privateFunc = closureFunc;
    })();
    // call closure function
    privateFunc("calling closure function");
    // ERROR: this will not work due to function being in closure scope
    closureFunc("calling closure function");
</script>

正在创建本地作用域

那个奇怪的函数圆括号到底做什么?

这是一些功能:

function name(someParameter) { ... }

把它放在括号里,并在末尾添加一些,立即执行:

(function name(someParameter) { ... })("Parameter text value");

注意函数参数。。。

为什么库使用本地作用域

图书馆通常使用本地作用域来避免污染,更重要的是与其他可能的图书馆发生冲突。想想两个库,它们都将定义一个名为getName的函数。定义它的最后一个库将简单地覆盖第一个库的实现,从而使第一个库发生故障。

当每个库创建自己的闭包范围时,它们可以在其中创建任何函数、变量并使用它们,而不用担心被重写。库通常只是将一些小部分公开到全局范围中,所以其他脚本实际上可以使用该库。

(function() {
    var closureVar = "I'm local";
    globalVar = "I'm global";
    // or
    window.globalVar2 = "I'm global equivalent";
})();

省略CCD_ 6或引用CCD_。

由于function f是在另一个函数范围(外部(function(){..})()(内声明的,因此脚本不起作用,因此仅用于本地(在同一范围内(。这实际上是使用这种构造的要点,而不是用剩下的函数和变量来扰乱全局环境。

没有toAlert函数——它是函数f的参数。然而,f不在立即执行的匿名函数之外的范围内。

如果你想公开f,你需要从匿名函数返回它,这样你就可以捕获并调用它