html - Opseg funkcije u JavaScriptu između oznaka skripte


Imam dva različita JSP-a koje Java backend spaja zajedno i šalje natrag na istu renderiranu HTML stranicu.

Svaki JSP ima vlastiti <script> blok i definira funkcije unutar tog bloka:

JSP #1:

<script type="text/javascript">
    function blah() { ... }
</script>

JSP #2

<script type="text/javascript">
    function foo()
    {
        blah();
    }
</script>

Kao što sam rekao, backend dodaje ove u HTTP odgovor i šalje ih natrag pregledniku tijekom istog zahtjeva.

Kada pokrenem ovu stranicu u svom pregledniku, odmah mogu reći da se blah() ne izvršava kada se poziva foo(). Vidim pogrešku u konzoli u Firebug-u koja kaže blah() nije definirana. Pitam se ima li blah() opseg samo unutar svog vlastitog <script> taga, i isto vrijedi za foo(). Je li to slučaj ovdje, ili je nešto drugo pošlo po krivu?

Kada odem pogledati izvor stranice, vidim i blokove skripti i obje funkcije. To mi govori da se sve generira/prikazuje ispravno na strani poslužitelja, ali možda je moj pristup inherentno pogrešan (definiranje funkcija unutar različitih oznaka skripti). Unaprijed hvala.

Odgovor #1

svi su globalni. mogu se vidjeti međusobno. problem nastaje kada se definiraju i pozivaju jedni druge.

trebali biste ih definirati i pozvati tim redoslijedom:

  1. bar
  2. foo
  3. pozovi foo

    • foo izvršeno i poziva bar
    • bar se izvršava

Odgovor #2

Funkciju možete pozvati ovako:

  (function($) {

     var namespace;
         namespace = {
                     something : function() {
                                             alert('hello there!');
                                            },
                      bodyInfo : function() {
                                             alert($('body').attr('id'));
                                            }
                     };
         window.ns = namespace;
    })(this.jQuery);

   $(function() {
              ns.something();
              ns.bodyInfo();
   });