SORU
26 NİSAN 2011, Salı


JavaScript bir fonksiyon içinde global değişken tanımlama

JavaScript bir fonksiyon içinde global bir değişken tanımlamak mümkün mü?

Diğer işlevler trailimage değişken (makeObj işlev içinde bildirilen) kullanmak istiyorum.

<html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title></title>
        <script type="text/javascript">
            var offsetfrommouse = [10, -20];
            var displayduration = 0;
            var obj_selected = 0;
            function makeObj(address) {
                **var trailimage = [address, 50, 50];**
                document.write('<img id="trailimageid" src="'   trailimage[0]   '" border="0"  style=" position: absolute; visibility:visible; left: 0px; top: 0px; width: '   trailimage[1]   'px; height: '   trailimage[2]   'px">');
                obj_selected = 1;
            }

            function truebody() {
                return (!window.opera && document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body;
            }
            function hidetrail() {
                var x = document.getElementById("trailimageid").style;
                x.visibility = "hidden";
                document.onmousemove = "";
            }
            function followmouse(e) {
                var xcoord = offsetfrommouse[0];
                var ycoord = offsetfrommouse[1];
                var x = document.getElementById("trailimageid").style;
                if (typeof e != "undefined") {
                    xcoord  = e.pageX;
                    ycoord  = e.pageY;
                }
                else if (typeof window.event != "undefined") {
                    xcoord  = truebody().scrollLeft   event.clientX;
                    ycoord  = truebody().scrollTop   event.clientY;
                }
                var docwidth = 1395;
                var docheight = 676;
                if (xcoord   trailimage[1]   3 > docwidth || ycoord   trailimage[2] > docheight) {
                    x.display = "none";
                    alert("inja");
                }
                else
                    x.display = "";
                x.left = xcoord   "px";
                x.top = ycoord   "px";
            }

            if (obj_selected = 1) {
                alert("obj_selected = true");
                document.onmousemove = followmouse;
                if (displayduration > 0)
                    setTimeout("hidetrail()", displayduration * 1000);
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <img alt="" id="house" src="Pictures/sides/right.gif" style="z-index: 1; left: 372px;
            top: 219px; position: absolute; height: 138px; width: 120px" onclick="javascript:makeObj('Pictures/sides/sides-not-clicked.gif');" />
        </form>
    </body>
</html>

CEVAP
26 NİSAN 2011, Salı


Diğerlerinin dediği gibi evet, genel kapsamlı (tüm fonksiyonlar dışında) var global bir değişkeni kullanabilirsiniz:

<script>
var yourGlobalVariable;
function foo() {
    // ...
}
</script>

Alternatif olarak, window bir özellik atamak için:

<script>
function foo() {
    window.yourGlobalVariable = ...;
}
</script>

...çünkü tarayıcılar, tüm genel değişkenler window nesnenin özellikleri vardır. (Not: ECMA [JavaScript standart], bazı bütünsel [o let, const class ile ilan] 6 . Baskıolmazgenel nesne özellikleri, global rağmen.)

(the horror of implicit globals, ama bunu bilerek ve en iyi kaza yapıyor, belki de ES5*.* 15) kullanarak önlemek için sakıncası yok

Dedi ki: eğer mümkün olursa genel değişkenler (ve neredeyse kesinlikle) uzak dururdum. Ben de belirttiğim gibi, onlar sonunuzun özellikleri window window zaten plenty crowded enough tüm elemanları ile bir id (ve birçok ile sadece name) terk etti (ve ne olursa olsun yaklaşan şartname, IE döker her şeyi ile bir name).

Bunun yerine, kapsamlı bir fonksiyonu olarak kodunuzu sarın ve değişkenleri kapsam belirleme çalışması için yerel kullanım ve içindeki diğer fonksiyonları kilitler olun:

<script>
(function() { // Begin scoping function
    var yourGlobalVariable; // Global to your code, invisible outside the scoping function
    function foo() {
        // ...
    }
})();         // End scoping function
</script>

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Artorius FullPower

    Artorius Ful

    29 Temmuz 2007
  • Kap Slap

    Kap Slap

    8 Mart 2010
  • macpulenta

    macpulenta

    9 EYLÜL 2006