Intern ekstern JavaScript: Lær med eksempel

⚡ Smart opsummering

Internt og eksternt JavaScript beskriver de to understøttede placeringer af scriptkode i et webprojekt. Denne artikel sammenligner begge tilgange, viser eksempler på funktioner, forklarer korrekt linkning med async og defer, og angiver, hvornår hver placering giver bedre vedligeholdelse og ydeevne.

  • 📄 Intern placering: Code sidder mellem script-tags inde i HTML-dokumentet og indlæses med den side, der ejer det.
  • 🗂️ Ekstern placering: Code ligger i en separat .js-fil, der refereres til via src-attributten, så mange sider deler én kilde.
  • 🔗 Regel for sammenkædning: Et eksternt script-tag skal altid være lukket, og src-stien opløses i forhold til HTML-dokumentet, medmindre en fuldstændig sti angives.
  • 🇧🇷 Indlæsningskontrol: Attributten defer kører filen, når HTML-parsningen er færdig, mens async kører den, så snart downloadingen er færdig.
  • 🚀 Caching-fordel: Eksterne filer caches af browseren én gang og genbruges på tværs af hver side, der refererer til dem.
  • 🧭 Udvælgelseskriterium: Hold kort, sidespecifik logik intern, og flyt delt eller lang logik til en ekstern fil for nemmere fejlfinding.
  • 🚫 Inline-håndterere: Attributbaserede handlere såsom onclick mix markup med adfærd og bør erstattes af addEventListener.

Internt og eksternt JavaScript

Hvad er interne og eksterne JavaManuskript?

Du kan bruge JavaScript kode på to måder.

  1. Du kan enten inkludere JavaScript kode internt i dit HTML-dokument Selv.
  2. Du kan beholde JavaScript kode i en separat ekstern fil og peg derefter på den fil fra dit HTML-dokument.

Begge placeringer udfører præcis det samme sprog og producerer det samme resultat i browseren. Forskellen ligger i, hvor kildekoden er gemt, hvordan browseren downloader den, og hvor nemt koden kan genbruges og vedligeholdes på tværs af et websted.

Hvad er internt JavaManuskript?

Intern JavaEt script er kode skrevet direkte i et par script-tags i HTML-filen. Browseren læser markup'en fra top til bund, og når den når script-tagget, udfører den sætningerne med det samme uden ekstra netværksanmodninger.

Vi har brugt Intern JS indtil videre. Her er et eksempel -

<html>
<head>
  <title>My First JavaScript code!!!</title>
  <script type="text/javascript">
    // Create a Date Object
    var day = new Date();
    // Use getDay function to obtain todays Day.
    // getDay() method returns the day of the week as a number like 0 for Sunday, 1 for Monday,….., 5
    // This value is stored in today variable
    var today = day.getDay();
    // To get the name of the day as Sunday, Monday or Saturday, we have created an array named weekday and stored the values
    var weekday = new Array(7);
    weekday[0]="Sunday";
    weekday[1]="Monday";
    weekday[2]="Tuesday";
    weekday[3]="Wednesday";
    weekday[4]="Thursday";
    weekday[5]="Friday";
    weekday[6]="Saturday";
    // weekday[today] will return the day of the week as we want
    document.write("Today is " + weekday[today] + ".");
  </script>
</head>
<body>
</body>
</html>

Output:

Today is Wednesday.

Den udskrevne dag ændrer sig med den besøgendes systemur, fordi getDay returnerer et tal fra 0 for søndag til 6 for lørdag, og dette tal bruges som et indeks i ugedagsarrayet.

Hvad er eksternt JavaManuskript?

Du planlægger at vise den aktuelle dato og det aktuelle klokkeslæt på alle dine websider. Forestil dig, at du har skrevet koden og kopieret den til alle dine websider (f.eks. 100). Men senere vil du ændre det format, som datoen eller klokkeslættet vises i. I dette tilfælde skal du foretage ændringer på alle 100 websider. Dette vil være en meget tidskrævende og vanskelig opgave.

Så gem JavaScript kode i en ny fil med filtypenavnet .js. Tilføj derefter en kodelinje på alle dine websider for at pege på din .js-fil på denne måde:

<script type="text/javascript" src="currentdetails.js"></script>

BemærkDet antages, at .js-filen og alle dine websider er i den samme mappe. Hvis external.js-filen er i en anden mappe, skal du angive den fulde sti til din fil i src-attributten. Den afsluttende </script> Tagget er obligatorisk, selvom elementet ikke har noget indhold, fordi et selvlukkende scripttag ikke er gyldig HTML, og resten af ​​siden ville blive opslugt af det uafsluttede element.

Dette er den kode, du placerer i currentdetails.js:

var currentDate = new Date();
var day = currentDate.getDate();
var month = currentDate.getMonth() + 1;
var monthName;

var hours = currentDate.getHours();
var mins = currentDate.getMinutes();
var secs = currentDate.getSeconds();
var strToAppend;
if (hours >12 )
{
	hours1 = "0" + (hours - 12);
strToAppend = "PM";
}
else if (hours <12)
{
	hours1 = "0" + hours;
	strToAppend = "AM";
}
else
{
	hours1 = hours;
	strToAppend = "PM";
}

if(mins<10)
mins = "0" + mins;
if (secs<10)
	secs = "0" + secs;

switch (month)
{
	case 1:
		monthName = "January";
		break;
	case 2:
		monthName = "February";
		break;
	case 3:
		monthName = "March";
		break;
	case 4:
		monthName = "April";
		break;
	case 5:
		monthName = "May";
		break;
	case 6:
		monthName = "June";
		break;
	case 7:
		monthName = "July";
		break;
	case 8:
		monthName = "August";
		break;
	case 9:
		monthName = "September";
		break;
	case 10:
		monthName = "October";
		break;
	case 11:
		monthName = "November";
		break;
	case 12:
		monthName = "December";
		break;
}

var year = currentDate.getFullYear();
var myString;
myString = "Today is " + day +  " - " + monthName + " - " + year + ".<br />Current time is " + hours1 + ":" + mins + ":" + secs + " " + strToAppend + ".";
document.write(myString);

Dette er din currentdetails.js-fil. Bare rolig, hvis du ser lange linjer kode. Du lærer snart at kode. Foretag ændringer i dit HTML-dokument på denne måde:

<html>
	<head>
	   <title>My External JavaScript Code!!!</title>
	   <script type="text/javascript" src="currentdetails.js">
	   </script>
	</head>
	<body>
	</body>
</html>

⚠️ Advarsel: Det tidligere script ovenfor sætter et nul foran hver time, så klokken 11 om morgenen vises som 011. Det tildeler også hours1 uden at deklarere den, hvilket opretter en implicit global variabel og giver en fejl i strict-tilstand. Den korrigerede version nedenfor retter begge fejl.

En moderne omskrivning af den samme fil er kortere, deklarerer alle variabler og udfylder værdierne korrekt:

// currentdetails.js - corrected modern version
const now = new Date();

const months = ["January", "February", "March", "April", "May", "June",
                "July", "August", "September", "October", "November", "December"];

const hours24 = now.getHours();
const suffix  = hours24 >= 12 ? "PM" : "AM";
const hours12 = String(hours24 % 12 || 12).padStart(2, "0");
const mins    = String(now.getMinutes()).padStart(2, "0");
const secs    = String(now.getSeconds()).padStart(2, "0");

const message = "Today is " + now.getDate() + " - " + months[now.getMonth()] +
                " - " + now.getFullYear() + ". Current time is " +
                hours12 + ":" + mins + ":" + secs + " " + suffix + ".";

document.getElementById("stamp").textContent = message;

Eksempel på output:

Today is 29 - July - 2026. Current time is 09:05:07 AM.

Sådan linker du en ekstern JavaScriptfil korrekt

Tre detaljer afgør, om en ekstern fil overhovedet indlæses: stien, der er skrevet i src-attributten, positionen af ​​script-tagget i dokumentet, og den indlæsningsattribut, der anvendes på den.

Stier opløses i forhold til HTML-dokumentet, medmindre der angives en indledende skråstreg eller en fuld adresse.

kildeværdi Betydning Beslutter sig for at
aktuelle detaljer.js Samme mappe som HTML-siden /sider/aktuelledetaljer.js
js/nuværende detaljer.js Undermappe til den aktuelle mappe /pages/js/nuværendedetaljer.js
../nuværendedetaljer.js En mappe over den aktuelle /nuværende detaljer.js
/assets/js/nuværendedetaljer.js Absolut sti fra webstedets rod /assets/js/nuværendedetaljer.js

Attributten `loading` styrer, hvornår browseren stopper med at parse HTML for at køre filen. Tabellen nedenfor opsummerer de tre tilgængelige funktionsmåder.

Attribut Hent Udførelsesøjeblik Ordre bevaret
Ingen Blokerer HTML-parsing Umiddelbart efter download Ja
udsætte Parallelt med parsing Efter dokumentet er parset Ja
async Parallelt med parsing Så snart downloadet er færdigt Ingen
<!-- Recommended for scripts that read the DOM -->
<script src="js/currentdetails.js" defer></script>

<!-- Recommended for independent third party scripts -->
<script src="js/analytics.js" async></script>

<!-- Modern module syntax, deferred by default -->
<script type="module" src="js/app.js"></script>

💡 Tip: type="text/javascript" Attributten er valgfri i HTML5 og kan udelades. Behold den kun, når meget gamle browsere understøttes, eller erstat den med type="module" når du bruger import- og eksportopgørelser.

Intern vs. ekstern JavaManuskript: Vigtigste forskelle

Sammenligningen nedenfor sætter begge placeringer side om side på tværs af de faktorer, der normalt afgør valget.

faktor Intern JavaScript Ekstern JavaScript
Opbevaringssted Inde i HTML-filen Separat fil med filtypenavnet .js
Genbrug på tværs af sider Kræver kopiering på hver side Én fil refereret af hver side
Browser cachelagring Gendownloadet med hver side Cachelagret én gang og genbrugt
Vedligeholdelsesindsats Høj når koden deles Lav, én fil at redigere
Ekstra HTTP-anmodning Ingen Ja, én pr. fil
Debugging Sværere i en lang HTML-fil Nemmere med tydelige filnavne og linjenumre
Bedste velegnet til Kort sidespecifik logik Delte biblioteker og lange scripts

Hvornår skal man bruge intern og ekstern JavaScript Code?

Hvis du kun har nogle få linjer kode, der er specifik for en bestemt webside, så er det bedre at beholde din JavaScript-kode internt i dit HTML-dokument.

På den anden side, hvis din JavaHvis scriptkode bruges på mange websider, bør du overveje keeping din kode i en separat fil. I så fald, hvis du ønsker at foretage ændringer i din kode, skal du kun ændre én fil, hvilket gør kodevedligeholdelse nem. Hvis din kode er for lang, er det også bedre at gemme den i en separat fil. Dette hjælper med nem fejlfinding.

En praktisk regel for begyndere er en grænse på cirka ti linjer. Alt, der er kortere og sidespecifikt, kan forblive internt, mens alt, der er længere eller delt, hører hjemme i en ekstern fil.

inline JavaScript og hvorfor det bør undgås

En tredje placering findes på ældre sider, hvor koden er skrevet direkte i en HTML-attribut. Selvom den stadig kører, blander den struktur med adfærd og kan ikke caches, genbruges eller være dækket af en streng indholdssikkerhedspolitik.

<!-- Inline handler: works, but avoid it -->
<button onclick="alert('Clicked')">Click me</button>

<!-- Preferred: behaviour attached from a script -->
<button id="greet">Click me</button>

<script>
  document.getElementById("greet").addEventListener("click", () => {
      alert("Clicked");
  });
</script>

Når du er tryg ved at placere scripts, kan du fortsætte med JavaScript array-metoder, undersøgelse sløjfer ind JavaScript, og arbejde igennem praktisk JavaEksempler på scriptkodeEksterne filer gør det også langt nemmere at administrere browserlagringslogik, f.eks. småkager i JavaScript.

Ofte Stillede Spørgsmål

Placer den lige før det afsluttende body-tag, eller i head med defer-attributten. Begge muligheder lader HTML'en gengives først, så elementerne findes, når koden køres.

Ja. Tilføj ét script-tag pr. fil. Uden asynkron udfører browseren dem i den rækkefølge, de vises, så placer filer, der definerer delte funktioner, før de filer, der kalder dem.

De sædvanlige årsager er en forkert src-sti, et manglende lukkescript-tag eller et filnavn med forskellig brug af store bogstaver. Åbn browserens netværkspanel, og se efter et 404-svar.

Kun ved første besøg, når der foretages én ekstra anmodning. Derefter serveres filen fra browserens cache, hvilket normalt er hurtigere end at gentage den samme kode på hver side.

De fleste assistenter returnerer en enkelt HTML-fil med interne script-tags, fordi det kører uden opsætning. Bed eksplicit om en separat .js-fil, når du har brug for en produktionsklar struktur.

Eksterne filer med async-attributten passer til tredjeparts AI-widgets såsom chatbots, fordi de indlæses uafhængigt og aldrig blokerer den omgivende side fra at blive gengivet.

Opsummer dette indlæg med: