Something went wrong. Try again.
MIRROR: javascript for 🐜's, a tiny runtime with big ambitions ant.themackabu.dev
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970// Demonstrate that functions are objects and have __code property
// Basic functionfunction greet(name) { return "Hello, " + name + "!";}
// Functions are objects - we can add properties to themgreet.callCount = 0;greet.description = "A greeting function";
// Accessing function propertiesconsole.log("Function name: " + greet.name);console.log("Description: " + greet.description);
// The __code property contains the function's bytecode/implementationconsole.log("\n--- Function __code property ---");console.log("greet.__code: " + greet.__code);console.log("Type of __code: " + typeof greet.__code);
// We can call the function normallylet result = greet("World");console.log("\nCalling greet('World'): " + result);
// Demonstrate with a more complex functionfunction fibonacci(n) { if (n <= 1) { return n; } return fibonacci(n - 1) + fibonacci(n - 2);}
fibonacci.purpose = "Calculate Fibonacci numbers";fibonacci.complexity = "O(2^n) - exponential";
console.log("\n--- Another function example ---");console.log("Function: " + fibonacci.name);console.log("Purpose: " + fibonacci.purpose);console.log("Complexity: " + fibonacci.complexity);console.log("fibonacci.__code: " + fibonacci.__code);
// Call itconsole.log("fibonacci(7) = " + fibonacci(7));
// Functions can be stored in objectslet mathOps = { add: function(a, b) { return a + b; }, multiply: function(a, b) { return a * b; }};
console.log("\n--- Functions as object properties ---");console.log("mathOps.add: " + mathOps.add);console.log("mathOps.add.__code: " + mathOps.add.__code);console.log("mathOps.add(5, 3) = " + mathOps.add(5, 3));
// Functions can be assigned to variableslet myFunc = greet;myFunc.newProperty = "Added to the reference";
console.log("\n--- Function assignment ---");console.log("myFunc === greet: " + (myFunc === greet));console.log("myFunc.__code: " + myFunc.__code);console.log("myFunc('Alice'): " + myFunc('Alice'));
// Anonymous functionlet anon = function(x) { return x * 2; };console.log("\n--- Anonymous function ---");console.log("anon.__code: " + anon.__code);console.log("anon(21) = " + anon(21));