Funktionen

Nächste Vorherige Lösung Punkte

In der Informatik gibt es unscharfe, wichtige Begriffe. Bei dieser Frage geht es um Begriffe wie Funktionen, Methoden, Routinen, Prozeduren, Module, Programm, Unterprogramm, deren Bedeutungen von ihrer Herkunft abhängen können und die sich ( in einem allgemeineren Kontext ) gegenseitig überlappen.
In diesem Kontext entspricht ein "formaler Parametern" einem freien Platzhalter, der noch mit einem "tatsächlichen Parametern" besetzt werden kann. [mehr]
In diesem Kontext entspricht ein "Funktionsargument" einem aktuellen Wert, der für die konkrete Ausführung ( Funktionsaufruf ) verwendet wird.
Eine statische Funktionsbibliothek Eine statische System-Bibliothek ( nativ-Objekt-Module ) wird dem kompilierten (Haupt-) Programms hinzu-gelinkt. Dadurch ergibt sich das gesamte ausführbare Programm, das den nativ-Code der Bibliotheksmodule enthält. [mehr]
Eine dynamische ( System- ) Bibliothek ( DLL = Dynamic Link Library ) enthält i.a. nativ-Funktionscode und Ressourcen. [mehr]
Eine DLL wird nur einmal geladen und von einer oder mehrere Anwendungen benutzt. Weil die exportierten DLL-Funktionen keinen eigenen Parameter-Stack haben, entspricht eine DLL ( Grob ausgedrückt ) einem ausführbaren Programm, das den Stack des jeweiligen Aufrufers nutzt.
Es geht um ECMAScript-Funktionen. Die Funktionen every und each erwarten als Parameter einen Array arr und eine Funktion fn. Bitte richtige Aussagen ankreuzen.
<script>
function every(arr, fn) { var i, n = arr.length;
  for (i = 0; i < n; i += 1) {
    if (!fn(arr[i])) { return false; }
  } return true;
}

function each(arr, fn) {
  every(arr, function(el) { return !fn(el); });
}

var a = [3, 4, , 5], 
    b = [         ], 
    c = Object.create(a);

each(a, function(el) { c.push(el*el); });
each(a, function(el) { b.push(el*el); });
each(a, function(el) { a.push(el*el); });
</script>
Weil die namenlose Funktion function(el){...} in den each()-Aufrufen stets die gleiche Variable el verwendet, können keine unterschiedlichen Werte auftreten.
Nach each(a, function(el) { c.push(el*el); }); ist c = [3,4,9,16]
Nach each(a, function(el) { b.push(el*el); }); ist b = [9,16]
Nach each(a, function(el) { a.push(el*el); }); ist a = [3,4,5,9,16,25]
Es geht um ein Objekt erde, das den Erd-Radius und Formeln zur Berechnung des Erd-Umfanges enthält.
<script>
var erde = { 
  radius          : 6373,
  umfang_return   : 'return (2*r*Math.PI).toFixed(1)',
  umfang_new_fn   : new Function('r','return (2*r*Math.PI).toFixed(1);'),
  umfang_anonym_fn: function(r){return (2*r*Math.PI).toFixed(1);}
};
/* 1 */
</script>
Wird bei /* 1 */ alert(erde.umfang_return(erde.radius) aufgerufen, so wird 40042.7 angezeigt
Wird bei /* 1 */ alert(erde.umfang_new_fn(erde.radius)) aufgerufen, so wird 40042.7 angezeigt
Wird bei /* 1 */ alert(erde['umfang_anonym_fn'](erde['radius'])) aufgerufen, so wird 40042.7 angezeigt
Wird bei /* 1 */ alert(JSON.stringify(erde)) aufgerufen, so wird
{"radius":6373,"umfang_return":"return 2*r*Math.PI.toFixed(1)"} angezeigt
Es geht um this.x und die annonyme funktion get: function() { return this.x; }. An welches Objekt wird diese Funktion gebunden?
       this.x = 22; 
var obj = { x : 33, 
    get : function() { return this.x; } 
}; 

// definiere Funktionen:
var get_fn = obj.get; 
var get_x = get_fn.bind( obj );

// Verwende diese Funktionen:
var arr = [ ];  arr.push( obj.get() );
                arr.push( get_fn()  );
                arr.push( get_x()   );  alert(arr);
Es liegt ein Syntaxfehler vor, weil this.x sowohl im globalen Bereich als auch im Objekt obj vorkommt.
Das Codeschnipsel gibt [33, 33, 33] aus.
Das Codeschnipsel gibt [33, 22, 33] aus.
Das Codeschnipsel gibt [33, 33, undefined] aus.
Die Strings str1 str2 sollen in die Objekte gaia1, gaia2 umgewandelt werden. Zum Testen werden hierzu JSON.parse() und eval() verwendet. Bitte sorgsam durchdenken. Richtige Antworten ankreuzen.
<script>
var str1 = '{"radius":6373,"umfang_return":"return (2*r*Math.PI).toFixed(1)"}',
    str2 = '{"radius":"6373","umfang_return":"return (2*r*Math.PI).toFixed(1);"}',
    str3 = '{radius:6373,umfang_anonym_fn:function(r){return (2*r*Math.PI).toFixed(1);} }',
    a = 3, b = "4", c = a * b, werte, typs,
 
    gaia1 = JSON.parse(str1),
    gaia2 = JSON.parse(str2),
    gaia3 = eval("(" + str3 + ")"), 

    fn1 = new Function("r",gaia1["umfang_return"]), 
    fn2 = new Function("r",gaia2["umfang_return"]),
    fn3 = gaia3['umfang_anonym_fn'];//,

  werte = [  a * b, 
             gaia1.radius, 
             gaia2['radius'],
            +gaia2.radius  ]; 

  typs = [ typeof  gaia1.radius, 
           typeof  gaia2['radius'], 
           typeof +gaia2['radius'] ],

  fn_werte = [ fn1(gaia1['radius']), 
               fn2(gaia2['radius']), 
               fn3(gaia3['radius'])  ]; /* 1 */
</script>
Ein alert( typs an der Stelle /* 1 */ zeigt number, string, number
Ein alert( werte ) an der Stelle /* 1 */ zeigt 12, 6373, 6373, 6373
Ein alert( fn_werte ) an der Stelle /* 1 */ zeigt 40042.7, 40042.7, 40042.7
Der folgende "templ_str" entspricht einem String-Muster, das durch Einsetzen von "items" an den jeweligen Einfügestellen "oO0oO0" zu einem konkreten a-Tag-String wird. Bitte richtige Aussagen ankreuzen.
<script>
function templ_expansion(templ_str, templ_items) {
  var i, j, r = templ_str.split('oO0'); 
  if(r.length !== 1 + 2*templ_items.length) {return '';};
  if(unescape) { for (i = 0; i < r.length-1; i += 2) { r[i] = unescape(r[i]); } }
  for (i = 0; i < templ_items.length; i += 1) { 
    j = 2 * i + 1; r[j] = templ_items[i];
  } return r.join('');
}

var templ = '<a href="oO0oO0">oO0oO0</a>';
var items = ["javascript:alert('href')","Teste Template"];
document.write( templ_expansion(templ,items) );
</script>
document.write(...) schreibt in das Dokument das a-Tag: <a href="javascript:alert('href')"</a>Teste Template</a>
Bei einem Mausklick wird das onclick-Event ausgeführt.
Bei einem Mausklick auf das angezeigt a-Tag wird javascript:alert('href') angezeigt.
Bei einem Mausklick auf das angezeigt a-Tag wird nach nach onclick kein href ausgeführt.
Bei einem Mausklick auf das angezeigt a-Tag wird javascript:alert('href') angezeigt.
Bei einem Mausklick auf das angezeigt a-Tag wird der String href angezeigt.