[英]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
處理程序)將永遠不會是全局變量:
var
關鍵字,使隱式全局 window.myVar = ...;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.