<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jon Randy 🎖️</title>
    <description>The latest articles on DEV Community by Jon Randy 🎖️ (@jonrandy).</description>
    <link>https://dev.to/jonrandy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F76131%2F7d2bf735-e6fe-42b4-8948-e5be83011f38.jpeg</url>
      <title>DEV Community: Jon Randy 🎖️</title>
      <link>https://dev.to/jonrandy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jonrandy"/>
    <language>en</language>
    <item>
      <title>JavaScript Abuse: Pipelining Functions</title>
      <dc:creator>Jon Randy 🎖️</dc:creator>
      <pubDate>Thu, 09 Jul 2026 08:09:04 +0000</pubDate>
      <link>https://dev.to/jonrandy/javascript-abuse-pipelining-functions-4ioc</link>
      <guid>https://dev.to/jonrandy/javascript-abuse-pipelining-functions-4ioc</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;u&gt;DISCLAIMER&lt;/u&gt;: Do NOT use this in production code. It's just a fun idea (full of potential danger) that &lt;em&gt;could&lt;/em&gt; lead to something more useful...&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Okay, so we're going to make the following JS code work, even though it doesn't look like it should:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;addOne&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;half&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;addOne&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;half&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 2&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;half&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;addOne&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt; &lt;span class="c1"&gt;// [2.5, 3, 3.5]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;How? Through the magic of JS features that you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Have always been told (weirdly) to avoid: &lt;strong&gt;type coercion&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Know about, but can't think of a use for: &lt;strong&gt;Symbols&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Regular viewers who've seen previous episodes such as '&lt;a href="https://dev.to/jonrandy/introducing-metho-safely-adding-superpowers-to-js-1lj"&gt;Metho&lt;/a&gt;', '&lt;a href="https://dev.to/jonrandy/turboprop-js-arrays-as-property-accessors-52h"&gt;Turboprop&lt;/a&gt;', and '&lt;a href="https://dev.to/jonrandy/ranger-js-range-syntax-for-anything-4djc"&gt;Ranger&lt;/a&gt;' will probably have a fairly good idea of how we're going to achieve this...&lt;/p&gt;

&lt;h2&gt;
  
  
  The Goal
&lt;/h2&gt;

&lt;p&gt;For the pipelining to work, essentially all we need is to make the following true:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;f[g] = x =&amp;gt; g(f(x))&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For ANY two functions &lt;strong&gt;f&lt;/strong&gt; and &lt;strong&gt;g&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;The function &lt;strong&gt;f&lt;/strong&gt; must have a method named with &lt;strong&gt;g&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;That method should be another function that is &lt;strong&gt;g&lt;/strong&gt; &lt;a href="https://en.wikipedia.org/wiki/Function_composition" rel="noopener noreferrer"&gt;composed&lt;/a&gt; with &lt;strong&gt;f&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If we can achieve this, we can essentially make a pipeline of as many functions as we like.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution
&lt;/h2&gt;

&lt;p&gt;Below is one way to achieve what we want. Please ask in the comments if there's anything you don't understand:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// JS will attempt to coerce a function to a string when&lt;/span&gt;
&lt;span class="c1"&gt;// we attempt to use it as a property accessor on another function.&lt;/span&gt;
&lt;span class="c1"&gt;// We can hijack that process to perform our magic&lt;/span&gt;

&lt;span class="nb"&gt;Function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toPrimitive&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hint&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// retain as much 'normal' coercion behaviour as we can&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hint&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;number&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;NaN&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hint&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;default&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="c1"&gt;// store a reference to the function being coerced - for later use&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;

  &lt;span class="c1"&gt;// create a unique symbol to use as the method key&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

  &lt;span class="c1"&gt;// create a unique method on the Function prototype&lt;/span&gt;
  &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;defineProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;configurable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// use a getter so we have access to the target function (this)&lt;/span&gt;
    &lt;span class="c1"&gt;// when creating the method to return&lt;/span&gt;
    &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// remove the method when used - single use only&lt;/span&gt;
      &lt;span class="k"&gt;delete&lt;/span&gt; &lt;span class="nb"&gt;Function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="c1"&gt;// the method itself - our composed function x =&amp;gt; g(f(x))&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;

  &lt;span class="c1"&gt;// self cleanup for stray tokens left behind from coercions&lt;/span&gt;
  &lt;span class="c1"&gt;// that could occur outside of an intended pipeline&lt;/span&gt;
  &lt;span class="nf"&gt;queueMicrotask&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;delete&lt;/span&gt; &lt;span class="nb"&gt;Function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;

  &lt;span class="c1"&gt;// return the symbol we 'named' the method with - so it is&lt;/span&gt;
  &lt;span class="c1"&gt;// immediately invoked&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;References (MDN):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive" rel="noopener noreferrer"&gt;&lt;code&gt;Symbol.toPrimitive&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty" rel="noopener noreferrer"&gt;&lt;code&gt;Object.defineProperty&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/queueMicrotask" rel="noopener noreferrer"&gt;&lt;code&gt;queueMicrotask&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why is This Dangerous?
&lt;/h2&gt;

&lt;p&gt;This is obviously dangerous and/or flaky for a number of reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We're adding properties to language-level prototypes. This is generally a pretty bad idea, but we're adding properties keyed with Symbols so not risking collisions. However, there's still no guarantee this will not cause issues.&lt;/li&gt;
&lt;li&gt;Anything relying on coercion of functions to string primitives could well be trashed as we've modified the standard behaviour.&lt;/li&gt;
&lt;li&gt;It's not optimised - many identical functions will be recreated again and again.&lt;/li&gt;
&lt;li&gt;It will almost certainly have issues pipelining functions that use &lt;code&gt;this&lt;/code&gt;, although I'm not even sure what functionality one would expect in that case.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Could it be Made Safer/Better?
&lt;/h2&gt;

&lt;p&gt;The main way it could be made safer would probably be to mark or subclass pipelineable functions in some way - so that we could leave standard function behaviour intact. The problem with this is that we'd probably lose the nice syntax or, at the very least, end up with something less elegant.&lt;/p&gt;

&lt;p&gt;A way to improve it might be to assign the intermediate functions meaningful names constructed from the names of the pipelined functions - might be nice in stack traces.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do this?
&lt;/h2&gt;

&lt;p&gt;Why not? 😀&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://notbyai.fyi/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A262%2Fformat%3Awebp%2F0%2ATmJE4bAgJ6qvbSnV" alt="Not by AI" width="262" height="84"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Far too many Packers and Packer-type thinking in software development and education. We need more Mappers!

Which are you?

#webdev #softwaredevelopment #programming

https://beautiful-programmers-stone.netlify.app/chapter-1#mappers-and-packers</title>
      <dc:creator>Jon Randy 🎖️</dc:creator>
      <pubDate>Sun, 28 Jun 2026 06:35:09 +0000</pubDate>
      <link>https://dev.to/jonrandy/far-too-many-packers-and-packer-type-thinking-in-software-development-and-education-we-need-more-39j</link>
      <guid>https://dev.to/jonrandy/far-too-many-packers-and-packer-type-thinking-in-software-development-and-education-we-need-more-39j</guid>
      <description>&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://beautiful-programmers-stone.netlify.app/chapter-1#mappers-and-packers" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;beautiful-programmers-stone.netlify.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Function Names in JS Can't Contain Spaces, Right?</title>
      <dc:creator>Jon Randy 🎖️</dc:creator>
      <pubDate>Wed, 24 Jun 2026 11:28:13 +0000</pubDate>
      <link>https://dev.to/jonrandy/function-names-in-js-cant-contain-spaces-right-mp7</link>
      <guid>https://dev.to/jonrandy/function-names-in-js-cant-contain-spaces-right-mp7</guid>
      <description>&lt;h2&gt;
  
  
  WRONG!
&lt;/h2&gt;

&lt;p&gt;Despite the widespread belief that function names in JavaScript &lt;strong&gt;MUST&lt;/strong&gt; follow the same rules as identifiers - this is not actually true. Sure, when you use the &lt;code&gt;function&lt;/code&gt; keyword to define a function then the name you give in the code must follow the naming rules for identifiers i.e. cannot start with a number, cannot contain spaces, can only use certain characters etc.  However, it IS perfectly possible for the name of the function to contain spaces - or any other character. A function's name can actually be ANY string at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  OK... Explain?
&lt;/h2&gt;

&lt;p&gt;When you use the &lt;code&gt;function&lt;/code&gt; keyword, the name you provide is used as the function's &lt;strong&gt;&lt;em&gt;identifier&lt;/em&gt;&lt;/strong&gt; and is &lt;strong&gt;ALSO&lt;/strong&gt; used to set the name property of the created function - i.e. the function's name. That identifier is then used (scoped) in one of two ways depending on whether you are doing function declaration or function expression. The important thing here is that the function's identifier and the function's name happen to be the same, but are actually two different things. The fact that the language syntax mandates an identifier name here means that most of the time the function's name appears to be following the same rules... but it doesn't have to! There are other ways to set the name of a function:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Using &lt;code&gt;Object.defineProperty&lt;/code&gt; - AFTER function creation&lt;/strong&gt;
A function's &lt;code&gt;name&lt;/code&gt; property is defined with &lt;code&gt;{ writable: false, configurable: true}&lt;/code&gt; - so we cannot set it directly by assigning our value to the property, but we can define it as follows:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;myFunc&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
  &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;defineProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myFunc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my custom name 😛&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myFunc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 'my custom name 😛'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Using a property name trick - DURING function creation&lt;/strong&gt;
We can set the name at creation time without a separate step by use a computed property name trick, which leverages how JS infers names for object methods and functions:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my dynamic 🎉 name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="p"&gt;}[&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "my dynamic 🎉 name"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  But This is Just a Trick That's Useless?
&lt;/h2&gt;

&lt;p&gt;You might think that, but it's actually used in many libraries - usually for making nice names to appear in stack traces (most modern JS engines will use a function's name property to refer to the function).&lt;/p&gt;

&lt;p&gt;Oh, and JavaScript actually already makes functions with names containing spaces... and you've probably already used this feature without knowing it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;myFunc&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;func2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;myFunc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;({})&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myFunc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 'myFunc'&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;func2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 'bound myFunc'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yes, a function created by using &lt;code&gt;bind&lt;/code&gt; has a name containing a space.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A262%2Fformat%3Awebp%2F0%2ATmJE4bAgJ6qvbSnV" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A262%2Fformat%3Awebp%2F0%2ATmJE4bAgJ6qvbSnV" alt="written by human" width="262" height="84"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>The most interesting and fun projects to build are always the one ones with little to no practical use, and I thoroughly recommend building them 👍</title>
      <dc:creator>Jon Randy 🎖️</dc:creator>
      <pubDate>Fri, 01 Aug 2025 16:36:59 +0000</pubDate>
      <link>https://dev.to/jonrandy/the-most-interesting-and-fun-projects-to-build-are-always-the-one-ones-with-little-to-know-1o69</link>
      <guid>https://dev.to/jonrandy/the-most-interesting-and-fun-projects-to-build-are-always-the-one-ones-with-little-to-know-1o69</guid>
      <description></description>
      <category>sideprojects</category>
      <category>productivity</category>
      <category>career</category>
      <category>discuss</category>
    </item>
    <item>
      <title>"We are destroying software" - https://antirez.com/news/145</title>
      <dc:creator>Jon Randy 🎖️</dc:creator>
      <pubDate>Thu, 13 Feb 2025 02:18:35 +0000</pubDate>
      <link>https://dev.to/jonrandy/we-are-destroying-software-httpsantirezcomnews145-4l60</link>
      <guid>https://dev.to/jonrandy/we-are-destroying-software-httpsantirezcomnews145-4l60</guid>
      <description></description>
    </item>
    <item>
      <title>@ben The spam is still bad on the site. Any progress on solving this?</title>
      <dc:creator>Jon Randy 🎖️</dc:creator>
      <pubDate>Wed, 22 Jan 2025 11:15:40 +0000</pubDate>
      <link>https://dev.to/jonrandy/ben-the-spam-is-still-bad-on-the-site-any-progress-on-solving-this-4bbp</link>
      <guid>https://dev.to/jonrandy/ben-the-spam-is-still-bad-on-the-site-any-progress-on-solving-this-4bbp</guid>
      <description></description>
      <category>discuss</category>
      <category>devto</category>
    </item>
    <item>
      <title>Don't do this. Please. It's going to be even harder to discover decent content on here 😞</title>
      <dc:creator>Jon Randy 🎖️</dc:creator>
      <pubDate>Wed, 13 Nov 2024 00:56:55 +0000</pubDate>
      <link>https://dev.to/jonrandy/dont-do-this-please-its-going-to-be-even-harder-to-find-decent-content-on-here-2nnf</link>
      <guid>https://dev.to/jonrandy/dont-do-this-please-its-going-to-be-even-harder-to-find-decent-content-on-here-2nnf</guid>
      <description></description>
    </item>
    <item>
      <title>LLMs are Bullshitters 🐮💩</title>
      <dc:creator>Jon Randy 🎖️</dc:creator>
      <pubDate>Sat, 15 Jun 2024 07:17:13 +0000</pubDate>
      <link>https://dev.to/jonrandy/llms-are-bullshitters-1lm1</link>
      <guid>https://dev.to/jonrandy/llms-are-bullshitters-1lm1</guid>
      <description>&lt;p&gt;Just read a great paper on LLMs. I strongly suggest reading it, but here's the conclusion:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Investors, policymakers, and members of the general public make decisions on how to treat these machines and how to react to them based not on a deep technical understanding of how they work, but on the often metaphorical way in which their abilities and function are communicated. Calling their mistakes ‘hallucinations’ isn’t harmless: it lends itself to the confusion that the machines are in some way misperceiving but are nonetheless trying to convey something that they believe or have perceived. This, as we’ve argued, is the wrong metaphor. The machines are not trying to communicate something they believe or perceive. Their inaccuracy is not due to misperception or hallucination. As we have pointed out, they are not trying to convey information at all. They are bullshitting.&lt;/p&gt;

&lt;p&gt;Calling chatbot inaccuracies ‘hallucinations’ feeds in to overblown hype about their abilities among technology cheerleaders, and could lead to unnecessary consternation among the general public. It also suggests solutions to the inaccuracy problem which might not work, and could lead to misguided efforts at AI alignment amongst specialists. It can also lead to the wrong attitude towards the machine when it gets things right: the inaccuracies show that it is bullshitting, even when it’s right. Calling these inaccuracies ‘bullshit’ rather than ‘hallucinations’ isn’t just more accurate (as we’ve argued); it’s good science and technology communication in an area that sorely needs it.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://link.springer.com/article/10.1007/s10676-024-09775-5?error=cookies_not_supported&amp;amp;code=7b38b735-0944-48f1-bc8c-88805d23286b" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--A8LRFlfM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://media.springernature.com/full/springer-static/cover-hires/journal/10676" height="1063" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://link.springer.com/article/10.1007/s10676-024-09775-5?error=cookies_not_supported&amp;amp;code=7b38b735-0944-48f1-bc8c-88805d23286b" rel="noopener noreferrer" class="c-link"&gt;
          ChatGPT is bullshit | Ethics and Information Technology
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Recently, there has been considerable interest in large language models: machine learning systems which produce human-like text and dialogue. Applications of these systems have been plagued by persistent inaccuracies in their output; these are often called “AI hallucinations”. We argue that these falsehoods, and the overall activity of large language models, is better understood as bullshit in the sense explored by Frankfurt (On Bullshit, Princeton, 2005): the models are in an important way indifferent to the truth of their outputs. We distinguish two ways in which the models can be said to be bullshitters, and argue that they clearly meet at least one of these definitions. We further argue that describing AI misrepresentations as bullshit is both a more useful and more accurate way of predicting and discussing the behaviour of these systems.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--u5WPjvtG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://link.springer.com/oscar-static/img/favicons/darwin/android-chrome-192x192-6f081ca7e5.png" width="192" height="192"&gt;
        link.springer.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>llm</category>
      <category>chatgpt</category>
    </item>
    <item>
      <title>One Byte Explainer: Recursion</title>
      <dc:creator>Jon Randy 🎖️</dc:creator>
      <pubDate>Thu, 13 Jun 2024 07:52:02 +0000</pubDate>
      <link>https://dev.to/jonrandy/one-byte-explainer-recursion-9hn</link>
      <guid>https://dev.to/jonrandy/one-byte-explainer-recursion-9hn</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for DEV Computer Science Challenge v24.06.12: One Byte Explainer.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Explainer
&lt;/h2&gt;

&lt;p&gt;To understand recursion, see &lt;a href="https://dev.to/jonrandy/one-byte-explainer-recursion-9hn"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>cschallenge</category>
      <category>computerscience</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to Calculate the Nth Fibonacci Number</title>
      <dc:creator>Jon Randy 🎖️</dc:creator>
      <pubDate>Wed, 03 Apr 2024 08:50:27 +0000</pubDate>
      <link>https://dev.to/jonrandy/how-to-calculate-the-nth-fibonacci-number-1g49</link>
      <guid>https://dev.to/jonrandy/how-to-calculate-the-nth-fibonacci-number-1g49</guid>
      <description>&lt;p&gt;Okay, lets dive straight into the code...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fib&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;((((&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explanation &lt;a href="https://akuli.github.io/math-tutorial/fib.html"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>interview</category>
    </item>
    <item>
      <title>The Rise of Tech Bloggers Relying on Generative AI</title>
      <dc:creator>Jon Randy 🎖️</dc:creator>
      <pubDate>Wed, 14 Feb 2024 06:27:02 +0000</pubDate>
      <link>https://dev.to/jonrandy/the-rise-of-tech-bloggers-relying-on-generative-ai-4hi7</link>
      <guid>https://dev.to/jonrandy/the-rise-of-tech-bloggers-relying-on-generative-ai-4hi7</guid>
      <description>&lt;p&gt;In the ever-evolving landscape of online content creation, the utilization of generative AI has become increasingly prevalent, especially among tech bloggers. These bloggers, driven by various motivations, are turning to AI to automate the process of generating articles without thoroughly reviewing or fact-checking the content. While some may view this trend as a shortcut or an attempt to keep up with the fast-paced nature of digital media, it raises questions about the integrity and authenticity of information shared within the tech community.&lt;/p&gt;

&lt;p&gt;The allure of using generative AI for content creation is multifaceted. For some, it boils down to sheer laziness. The convenience of inputting a few prompts and receiving a fully-formed article within minutes can be irresistible, particularly when faced with deadlines or a lack of motivation. In a world where time is of the essence, the appeal of cutting corners can be tempting, albeit at the expense of quality and accuracy.&lt;/p&gt;

&lt;p&gt;Furthermore, peer pressure plays a significant role in motivating tech bloggers to embrace AI-generated content. In an era where online presence and engagement metrics reign supreme, bloggers may feel compelled to churn out content at a rapid pace to maintain relevance and visibility within their respective communities. The fear of being left behind or overshadowed by competitors drives many to adopt AI as a means of keeping up with the relentless demand for fresh content.&lt;/p&gt;

&lt;p&gt;Moreover, there's an underlying reluctance among some bloggers to admit their own limitations or gaps in knowledge. By relying on generative AI, they can mask their deficiencies and project an image of expertise without investing the time and effort required for in-depth research and analysis. This desire to maintain a facade of competence, coupled with the pressure to produce content consistently, leads many bloggers down the path of AI reliance, regardless of the ethical implications.&lt;/p&gt;

&lt;p&gt;However, the consequences of this trend extend beyond individual motivations. The unchecked proliferation of AI-generated content poses a threat to the credibility and reliability of information disseminated within the tech community. Articles produced without human oversight are prone to errors, inaccuracies, and biases inherent in the training data used by the AI models. As a result, readers are exposed to misinformation that can perpetuate misconceptions, mislead decision-making, and erode trust in online sources.&lt;/p&gt;

&lt;p&gt;In response to these concerns, it's essential for tech bloggers to exercise responsibility and diligence in their content creation processes. While AI can be a valuable tool for streamlining workflows and enhancing productivity, it should never serve as a substitute for human judgment and critical thinking. Bloggers must prioritize quality over quantity, taking the time to review and verify the accuracy of their content before publishing it for public consumption.&lt;/p&gt;

&lt;p&gt;Furthermore, transparency is paramount in maintaining trust and credibility with audiences. Bloggers who leverage AI should disclose their use of automated tools and acknowledge the limitations inherent in AI-generated content. By being open and honest about their processes, bloggers can foster a culture of accountability and integrity within the tech blogging community.&lt;/p&gt;

&lt;p&gt;Ultimately, the decision to rely on generative AI for content creation is a reflection of broader societal trends towards automation and digitalization. While the allure of efficiency and convenience may be enticing, it's imperative for tech bloggers to uphold ethical standards and prioritize the accuracy and integrity of the information they share. By doing so, they can ensure that their contributions to the tech discourse are meaningful, impactful, and worthy of audience trust and respect.&lt;/p&gt;

&lt;p&gt;...and, yes - #abotwrotethis&lt;/p&gt;

&lt;h1&gt;
  
  
  😉
&lt;/h1&gt;

</description>
      <category>beginners</category>
      <category>ai</category>
      <category>meta</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Misconceptions About Closures</title>
      <dc:creator>Jon Randy 🎖️</dc:creator>
      <pubDate>Wed, 27 Sep 2023 06:38:09 +0000</pubDate>
      <link>https://dev.to/jonrandy/misconceptions-about-closures-i15</link>
      <guid>https://dev.to/jonrandy/misconceptions-about-closures-i15</guid>
      <description>&lt;p&gt;The two biggest (and unfortunately widespread) misconceptions about closures:&lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  A closure is a special type of function that has access to its surrounding scope ❌
&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is entirely wrong for two reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Closures are &lt;strong&gt;not&lt;/strong&gt; functions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ALL&lt;/strong&gt; functions have access to their surrounding (lexical) scope*&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  To create a closure, you need to nest functions ❌
&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;p&gt;Again, entirely wrong - nesting of functions is irrelevant! Whenever a function is created, an associated closure is also created.&lt;/p&gt;




&lt;h2&gt;
  
  
  So, what is a closure?
&lt;/h2&gt;

&lt;p&gt;From &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures" rel="noopener noreferrer"&gt;MDN&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A closure is the combination of a function bundled together (enclosed) with references to its surrounding state&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The closure allows the function to access the state in which it was created.&lt;/p&gt;

&lt;p&gt;As a simplified visual:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsv20cf943j31pm5qt2tp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsv20cf943j31pm5qt2tp.png" alt="Closure" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*Except for functions created with &lt;code&gt;new Function(...)&lt;/code&gt; which form closures with the global scope&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
