Mendefinisikan variabel global dalam fungsi JavaScript

Adalah mungkin untuk menentukan variabel global dalam fungsi JavaScript?

Saya ingin menggunakan trailimage variabel (dinyatakan dalam makeObj fungsi) dalam fungsi-fungsi lainnya.

<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>
Mengomentari pertanyaan (4)
Larutan

Ya, sebagai orang lain telah mengatakan, anda dapat menggunakan var di lingkup global (di luar semua fungsi) untuk mendeklarasikan variabel global:

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

Bergantian, anda dapat menetapkan properti di jendela:

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

...karena di browser, semua variabel global global variabel yang dideklarasikan dengan var adalah sifat dari jendela objek. (Terbaru spesifikasi, ECMAScript 2015, baru membiarkan, t, dan kelas pernyataan di lingkup global membuat globals yang tidak't sifat-sifat objek global; konsep baru dalam ES2015.)

(Ada's juga horor implisit globals, tapi don't melakukannya dengan sengaja dan melakukan yang terbaik untuk menghindari melakukan hal itu dengan tidak sengaja, mungkin dengan menggunakan ES5's "penggunaan ketat".)

Semua yang mengatakan: saya'd hindari variabel global jika anda bisa (dan anda hampir pasti dapat). Seperti yang saya sebutkan, mereka akhirnya menjadi sifat dari jendela, dan jendela sudah banyak cukup ramai ada apa dengan semua elemen dengan sebuah id (dan banyak hanya dengan nama) yang dibuang di dalamnya (dan terlepas bahwa spesifikasi mendatang, YAITU kesedihan hanya tentang apa-apa dengan nama di sana).

Sebaliknya, bungkus kode dalam ruang lingkup fungsi dan penggunaan variabel lokal untuk ruang lingkup fungsi, dan membuat fungsi-fungsi lain dalam penutupan ini:

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

UPDATE1: Jika anda membaca komentar-komentar yang ada's nice diskusi ini konvensi penamaan tertentu.

UPDATE2: tampaknya bahwa sejak saya menjawab telah diposting konvensi penamaan yang sudah lebih formal. Orang-orang yang mengajar, menulis buku, dll. berbicara tentang var deklarasi, dan fungsi deklarasi.

UPDATE3: di Sini adalah tambahan wikipedia posting yang mendukung maksud saya: http://en.wikipedia.org/wiki/Declaration_(computer_programming)#Declarations_and_Definitions

...dan untuk menjawab pertanyaan utama. MENDEKLARASIKAN variabel sebelum anda fungsi. Ini akan bekerja dan akan mematuhi praktek yang baik mendeklarasikan variabel anda di bagian atas ruang lingkup :)

Komentar (8)

Hanya menyatakan

var trialImage;

luar. Kemudian

function makeObj(address) {
    trialImage = [address, 50, 50];
..
..
}

Semoga ini bisa membantu.

Komentar (0)

Hanya menyatakan hal itu di luar fungsi, dan menetapkan nilai-nilai di dalam fungsi. Sesuatu seperti:

<script type="text/javascript">
    var offsetfrommouse = [10, -20];
    var displayduration = 0;
    var obj_selected = 0;
    var trailimage = null ;  // GLOBAL VARIABLE
    function makeObj(address) {
        trailimage = [address, 50, 50];  //ASSIGN VALUE

Atau hanya mengeluarkan "var" dari nama variabel di dalam fungsi juga membuatnya global, tetapi lebih baik untuk menyatakan hal itu di luar sekali untuk kode bersih. Ini juga akan bekerja:

var offsetfrommouse = [10, -20];
var displayduration = 0;
var obj_selected = 0;

function makeObj(address) {
    trailimage = [address, 50, 50];  //GLOBAL VARIABLE , ASSIGN VALUE

Saya berharap contoh ini menjelaskan lebih lanjut: http://jsfiddle.net/qCrGE/

var globalOne = 3;
testOne();

function testOne()
{
    globalOne += 2;
    alert("globalOne is : " + globalOne );
    globalOne += 1;
}

alert("outside globalOne is : " + globalOne);

testTwo();

function testTwo()
{
    globalTwo = 20;
    alert("globalTwo is " + globalTwo);
    globalTwo += 5;
}

alert("outside globalTwo is :" + globalTwo);
Komentar (0)

Tidak, anda dapat't. Hanya mendeklarasikan variabel di luar fungsi. Anda don't harus menyatakan hal itu pada waktu yang sama seperti anda menetapkan nilai:

var trailimage;

function makeObj(address) {
  trailimage = [address, 50, 50];
Komentar (4)

Hal ini sangat sederhana untuk memaksimalkan trailimage variabel di luar fungsi dan set nilainya di makeObj fungsi. Sekarang anda dapat mengakses nilai dari mana saja.

var offsetfrommouse = [10, -20];
var displayduration = 0;
var obj_selected = 0;
var trailimage;
function makeObj(address) {
      trailimage = [address, 50, 50];
      ....
}
Komentar (0)
    var Global = 'Global';

    function LocalToGlobalVariable() {

    //This creates a local variable.

    var Local = '5';

    //Doing this makes the variable available for one session
    //(a page refresh - Its the session not local)

    sessionStorage.LocalToGlobalVar = Local;

    // It can be named anything as long as the sessionStorage references the local variable.
    // Otherwise it won't work
    //This refreshes the page to make the variable take effect instead of the last variable set.

    location.reload(false);
    };

    //This calls the variable outside of the function for whatever use you want.

    sessionStorage.LocalToGlobalVar;

Saya menyadari mungkin ada banyak kesalahan sintaks dalam hal ini tetapi ide umum... Terima kasih banyak LayZee untuk menunjukkan ini... Anda dapat menemukan apa yang lokal dan sesi Penyimpanan di http://www.w3schools.com/html/html5_webstorage.asp. Saya membutuhkan hal yang sama untuk kode saya dan ini adalah ide yang sangat baik.

Komentar (1)

Contoh klasik:

window.foo = 'bar';

Modern, aman contoh berikut praktek terbaik dengan menggunakan HIDUP:

;(function (root) {
    'use strict'

    root.foo = 'bar';
)(this));

Saat ini, ada's juga pilihan untuk menggunakan WebStorage API

localStorage.foo = 42;

atau

sessionStorage.bar = 21;

Performancewise, I'm tidak yakin apakah itu terasa lebih lambat daripada menyimpan nilai ke dalam variabel.

Luas browser mendukung seperti yang disebutkan pada Bisa saya gunakan...

Komentar (4)

Jadi, anda ingin variabel di dalam fungsi yang tersedia di luar fungsi? Mengapa tidak mengembalikan hasil dari variabel di dalam fungsi? var x = fungsi returnX { var x = 0; return x; } adalah ide...




    <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('');
            obj_selected = 1;
            return trailimage;
        }

        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>






Aku ingin't diuji ini, tapi jika kode anda bekerja sebelum itu perubahan kecil, maka harus bekerja.

Komentar (0)

Berikut adalah contoh kode yang mungkin dapat helful.

  var Human = function(){
   name = "Shohanur Rahaman";  // global variable
   this.name = "Tuly"; // constructor variable 
   var age = 21;
 };

  var shohan = new Human();

 document.write(shohan.name+"<br>");
 document.write(name);
 document.write(age); // undefined cause its local variable 

Di sini saya menemukan jawaban yang bagus Cara-dapat-satu-menyatakan-a-global-variabel dalam JavaScript

Komentar (1)

Berikut ini adalah metode yang mudah untuk membuat variabel yang tersedia dalam fungsi-fungsi lain tanpa harus menggunakan variabel global:

function makeObj() {
  // var trailimage = 'test';
  makeObj.trailimage = 'test';
}
function someOtherFunction() {
  document.write(makeObj.trailimage);
}

makeObj();
someOtherFunction();
Komentar (0)

jika anda membuat startup fungsi, anda dapat menentukan fungsi-fungsi global dan variabel dalam cara seperti:

function(globalScope)
{
     //define something
     globalScope.something() { 
         alert("It works");
     };
}(window)

Karena fungsi ini dipanggil secara global dengan argumen ini, ini adalah lingkup global di sini. Jadi, sesuatu yang seharusnya menjadi hal yang global.

Komentar (1)