2012-01-15 16 views
5

Şu anda yaklaşık 200 kez çalışır bir işlevi var. Böyleağır değişkenler dışındaki fonksiyonları gitmeliyim?

fonksiyon görünüm:

function GetB(av,bol){ 
var bxes=[ 
["11","12","13","21","22","23","31","32","33"], 
["14","15","16","24","25","26","34","35","36"], 
["17","18","19","27","28","29","37","38","39"], 
["41","42","43","51","52","53","61","62","63"], 
["44","45","46","54","55","56","64","65","66"], 
["47","48","49","57","58","59","67","68","69"], 
["71","72","73","81","82","83","91","92","93"], 
["74","75","76","84","85","86","94","95","96"], 
["77","78","79","87","88","89","97","98","99"] 
]; 

//code 
} 

ben her seferinde yeniden yazıyor düşünüyorum çünkü benim ilk endişe bu dizi her şeyi yavaşlatan olmasıdır dizi (veya böyle bir şey) bxes

Bu bxes dizi modifiye asla ve bunu küresel hale getirmek için sakıncası olmaz.

  • Yeniden yazma olayı hakkında endişelenmem gerekir mi?
+0

[JavaScript çöp toplama nedir?] (Http://stackoverflow.com/questions/864516/what-is-javascript-garbage-collection) –

cevap

3

Neden işleve dışına taşıyın değil olur (veya hiç değiştirildiği takdirde tarayıcılar takip yapmak ve bu değilse onu yeniden olmaz)? (Neden bir performans sorununa neden riske girer?)

Sadece "genel" olmak zorunda bile olmaz - sadece işlevin bir üst kapsamı içinde - ancak hem işlev hem de bxes ve diğer kod bir ebeveynde var olabilir işlev veya kapatma ...

(function(){ 
    var bxes = [...]; 
    window.GetB = function(av,bol){...}; 
})(); 
+0

Bu kopyaları bir kez okuyarak bunları hatırlıyorum. Sadece bir soru, yüküm/hazır kodum bu içeride mi yoksa içeride mi olmalı? – mithril333221

+0

gerçekten önemli değil - ama bir kapatma veya ana işlevi içinde onu yoksa ben zaten hepsini içine koyardım - [genel ad kirliliği önlemek] çabası (http://blogger.ziesemer.com içinde /2007/10/respecting-javascript-global-namespace.html). (Yük/hazır fonksiyonunuz zaten bu kapanma olarak hareket ediyor olabilir.) – ziesemer

3

Basit bir karşılaştırma, cevabı gösterir. sen yazdın olarak ilan fonksiyonu ile, 5.000.000 aramalar 12,739 saniye sürer. Dizi tanımı işlevin dışına taşınırken, aynı döngü sadece 0.169'u tüketir.

bu JavaScript motoruna göre değişir unutmayın - ve böylece tarayıcı - kullanılıyor.