Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重用没有全局变量的函数?_Javascript_Jquery - Fatal编程技术网

Javascript 重用没有全局变量的函数?

Javascript 重用没有全局变量的函数?,javascript,jquery,Javascript,Jquery,几天前,我通过自己的例子了解了全局变量和函数有多糟糕。因此,显然最好的解决方案是不使用它们,但是迟早我会需要一次又一次地重用我的变量和函数 所以我的问题是:我可以重用我的函数和变量而不全局声明它们吗?能做到吗 例如,我想多次重用我的alertBox函数和我的containsP变量: 演示: 我想避免碰撞全局对象的最简单方法就是创建自己的“应用程序上下文”。您可以通过创建一个自调用函数来实现这一点,该函数将整个js代码封装在每个文件中 (function( win ) { "use str

几天前,我通过自己的例子了解了全局变量和函数有多糟糕。因此,显然最好的解决方案是不使用它们,但是迟早我会需要一次又一次地重用我的变量和函数

所以我的问题是:我可以重用我的函数和变量而不全局声明它们吗?能做到吗

例如,我想多次重用我的
alertBox
函数和我的
containsP
变量:

演示:


我想避免碰撞全局对象的最简单方法就是创建自己的“应用程序上下文”。您可以通过创建一个自调用函数来实现这一点,该函数将整个js代码封装在每个文件中

(function( win ) {
    "use strict";

    var still_global_but_only_in_this_anonymous_closure = true;

    $(document).ready(function() {
         // ...
         // accessing the global object:
         win.some_global_property = true;
    });
}( this ));

实际上,您已经在使用传入
.ready()
的匿名函数创建这样一个本地上下文。这只是更明确的方式。该自调用方法只需使用全局对象作为参数调用自身(在这里您仍然可以显式访问全局变量)。此外,通过调用
“use strict”
您可以避免意外创建全局变量alá
“Ops_I_忘记了_Var_station=true;

您发布的代码没有全局变量。函数内部声明的变量(在您的示例中,是匿名
document.ready
处理程序)除非你犯了以下两个错误之一,否则永远不会全球化:

  • 忘记
    var
    关键字,使
  • 明确地说
    window.myVar=…;

  • 这些不是全局的,因为它们的作用域是传递给
    $(document.ready()的匿名函数
    。您还打算在哪里使用它们?您最初在ready函数中声明它们的示例运行良好。请记住,有时您确实需要全局函数,要在包装函数中执行此操作,请使用以下命令:window.myFunc=myFunc;
    (function( win ) {
        "use strict";
    
        var still_global_but_only_in_this_anonymous_closure = true;
    
        $(document).ready(function() {
             // ...
             // accessing the global object:
             win.some_global_property = true;
        });
    }( this ));