Understand JavaScript scope within for-loop -


this question has answer here:

the following piece of code prints out "k" 16 times.

var rest = "klmnopqrstuvwxyz".split(""), fns = {}; (var i=0; i<rest.length; i++) {     (function(i){         fns[rest[i]] = function() {             console.log(rest[i]);         };         fns.k();     })(i); } 

this piece of code prints out alphabets "k", "l" ....... "y", "z"

var rest = "klmnopqrstuvwxyz".split(""), fns = {}; (var i=0; i<rest.length; i++) {     fns[rest[i]] = function() {         console.log(rest[i]);     };     fns.k(); } 

i new javascript, , don't quite understand how use of iife in second example results in different behavior. can please clarify?

var rest = "klmnopqrstuvwxyz".split(""), fns = {}; (var i=0; i<rest.length; i++) {     (function(i){         //the inside function private, not same outside,         //any modification loop won't affect one.         fns[rest[i]] = function() {             console.log(rest[i]);         };         fns.k();          // fns[rest[i]](); should use if printing correct letter     })(i); } 

no iife

var rest = "klmnopqrstuvwxyz".split(""), fns = {}; (var i=0; i<rest.length; i++) {     fns[rest[i]] = function() { //you declare function each letter         console.log(rest[i]); //this contains current iteration loop     };     fns.k(); //calls first function defined, "k" prints current  iteration } 

Comments

Popular posts from this blog

java - WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/board/] in DispatcherServlet with name 'appServlet' -

android - How to create dynamically Fragment pager adapter -

1111. appearing after print sequence - php -