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

javascript框架如何拥有自己的工作空间?,javascript,Javascript,可能重复: 在过去的几天里,我一直对Javascript框架如何拥有自己的工作区很感兴趣,我的意思是,他们如何能够调用任意名称的变量,并且在不涉及局部变量的情况下使用它 我现在正在编写一个API,我面临着局部变量/函数局部名称的问题,如果它们已经存在的话 所以,我所做的是研究框架是如何工作的,我看到他们使用了如下名称空间函数: (function(){ .... })() 所以我试着做一些相似的事情 <html> <head> <script ty

可能重复:

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

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

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

(function(){ .... })()
所以我试着做一些相似的事情

<html>

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

    <script>
      toAlert("hi");
    </script>

  </body>
</html>

(功能(){
函数f(toAlert){alert(toAlert);}
})();
toAlert(“你好”);
但它不起作用

因此,我有几个问题:

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

  • 我看到框架使用了“window”命令,它是与名称空间函数有关,还是将函数“public”还是w/e

  • 如果你能给我关于所有这些事情的信息/教程,以及如何从头到尾完成这些事情,我会很高兴


  • 当然,它不起作用,因为您的
    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) { ... })("Parameter text value");
    
    注意函数参数

    为什么库使用局部作用域? 库通常使用局部范围来避免污染,更重要的是与其他可能的库发生冲突。考虑两个库,它们都定义了一个名为
    getName
    的函数。最后一个定义它的库将简单地覆盖第一个库的实现,从而使第一个库发生故障

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

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

    省略
    var
    或引用
    window
    对象会使函数或变量成为全局对象。

    当然它不起作用,因为您的
    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) { ... })("Parameter text value");
    
    注意函数参数

    为什么库使用局部作用域? 库通常使用局部范围来避免污染,更重要的是与其他可能的库发生冲突。考虑两个库,它们都定义了一个名为
    getName
    的函数。最后一个定义它的库将简单地覆盖第一个库的实现,从而使第一个库发生故障

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

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

    省略
    var
    或引用
    window
    对象会使函数或变量成为全局对象。

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

    脚本不起作用,因为
    函数f
    是在另一个函数作用域(外部
    (function(){..})(
    )内声明的,因此只供本地使用(在同一作用域内)。这实际上是使用这种结构的要点,而不是用遗留的函数和变量扰乱全局环境。

    没有
    toAlert
    函数——这是函数
    f
    的一个参数<但是,code>f不在立即执行的匿名函数的范围之外


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

    没有
    toAlert
    函数——这是函数
    f
    的一个参数<但是,code>f不在立即执行的匿名函数的范围之外


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

    你调用的名称空间函数实际上被称为函数closuresClosures是函数返回内部函数的一般模式。(function(){}())的通常名称是模块pattern@Mor塞拉:你应该更新你原来的问题,而不是问一个新的onenamespace函数,因为你称它们为函数closuresClosures是函数返回内部函数的一般模式。(function(){}())的通常名称是模块pattern@Mor塞拉:你应该更新你原来的问题,而不是问一个新问题……而且没有
    toAlert