Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 156481
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T10:20:08+00:00 2026-05-11T10:20:08+00:00

I am very puzzled about this code: var closures = []; function create() {

  • 0

I am very puzzled about this code:

var closures = []; function create() {   for (var i = 0; i < 5; i++) {     closures[i] = function() {       alert("i = " + i);     };   } }  function run() {   for (var i = 0; i < 5; i++) {     closures[i]();   } }  create(); run(); 

From my understanding it should print 0,1,2,3,4 (isn’t this the concept of closures?).

Instead it prints 5,5,5,5,5.

I tried Rhino and Firefox. Could someone explain this behavior to me?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-11T10:20:09+00:00Added an answer on May 11, 2026 at 10:20 am

    Fixed Jon’s answer by adding an additional anonymous function:

    function create() {   for (var i = 0; i < 5; i++) {     closures[i] = (function(tmp) {         return function() {           alert('i = ' + tmp);         };     })(i);   } } 

    The explanation is that JavaScript’s scopes are function-level, not block-level, and creating a closure just means that the enclosing scope gets added to the lexical environment of the enclosed function.

    After the loop terminates, the function-level variable i has the value 5, and that’s what the inner function ‘sees’.


    As a side note: you should beware of unnecessary function object creation, espacially in loops; it’s inefficient, and if DOM objects are involved, it’s easy to create circular references and therefore introduce memory leaks in Internet Explorer.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 119k
  • Answers 119k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer An array can hold any object. I'm not familiar with… May 11, 2026 at 11:46 pm
  • Editorial Team
    Editorial Team added an answer From your question it sounds like a tutorial or an… May 11, 2026 at 11:46 pm
  • Editorial Team
    Editorial Team added an answer To give some history, Executors were only added as part… May 11, 2026 at 11:46 pm

Related Questions

Thanks for answers,Actually I am not puzzled about draw 1024*768 pixels is slower than
This is not yet particularly programing related but, I am very interested in how
Every method I write to encode a string in Java using 3DES can't be
I'm just beginning the process of exploring i18n in CakePHP and I can't seem

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.