簡體   English   中英

重用沒有全局變量的函數?

[英]Reuse function without global variables?

幾天前,我在自己的示例中了解了全局變量和函數的錯誤程度。 因此,顯然最好的解決方案是不使用它們,但是遲早我將需要一遍又一遍地重用我的變量和函數。

所以我的問題是:是否可以在不全局聲明函數的情況下重用函數和變量? 能做到嗎

例如,我想重復使用我的alertBox函數和containsP變量幾次:

演示: http : //jsfiddle.net/ajmyZ/

//I am BAD GLOBAL FUNCTION inside var 
//But I am reusable!!! 

var alertBox = function () {
    alert("Hey I am BAD function!!")
}





$(document).ready(function () {
    //I am BAD GLOBAL var 
    //But I am reusable TOO!!! 
    var containsP = $("div p:first");
    containsP.click(function () {
        alert("Hi BAD var HERE!!");
    });

    $("p").eq(1).click(function () {
        alertBox();
    });

    //I am the NICEST function here
    //but I am NOT reusable :(

    $("p").eq(2).click(function () {
        alert("I am the NICEST function here!!");

    });

});

我猜想避免破壞全局對象的最簡單方法就是創建自己的“應用程序上下文”。 您可以通過創建一個自調用函數來完成此任務,該函數將您的整個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"; 您可以防止意外創建全局變量,例如"Ops_I_Forgot_The_Var_Statment = true;

您發布的代碼沒有全局變量。 除非您犯以下兩個錯誤之一,否則在函數內部聲明的變量(在您的示例中為匿名document.ready處理程序)將永遠不會是全局變量:

  1. 忘記var關鍵字,使隱式全局
  2. 明確地說window.myVar = ...;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM