Javascript is one of the 3 main core technologies in world wide web. Since it's origin 2 decades back, it has evolved a lot and as per today, it is the trendiest programming language on earth.
Since 2009 I have used javascript to do web development and until recently I used it with basic dom manipulations with jquery, simple UI logic with vanilla JS and with some frameworks as AnuglarJS. The basic knowledge I had about JS was sufficient enough to get above things done. But recently when I started doing some serious development with React and GraphQL, I realized that my knowledge on JS is pretty primitive and I'm not really applying any core JS concepts or patterns in my code. At the same time, while I was listing to a podcast in Software Engineering Daily I found Kyle Simpson was explaining about series of his books called "You Don't know Javascript". With that, I got the interest in reading the book to sharpen my saw in JS. It's a pretty interesting book and it covers many basic concepts in JS. Following series of articles will cover what I learned in each of
these books.
The scope is one of the core concepts in Javascript and it's a must to have a thorough understanding of the scope to write better JS code. Let's dig in further to scope.
The scope is set of well-defined rules on how to store and retrieve variables in a program. In one way or other, you are always dealing with these rules when writing and execute code in JS.
In JS assignment for the scope can be performed in two ways.
a = 3;
2) or by passing an argument to a function parameter.
2) with() function
Takes an object as the input and consider the object as a new separate lexical scope.
these books.
Scope
The scope is one of the core concepts in Javascript and it's a must to have a thorough understanding of the scope to write better JS code. Let's dig in further to scope.
What is scope?
The scope is set of well-defined rules on how to store and retrieve variables in a program. In one way or other, you are always dealing with these rules when writing and execute code in JS.
In JS assignment for the scope can be performed in two ways.
1) by using = expression
a = 3;
2) or by passing an argument to a function parameter.
function foo(x) { } foo(3);
Lexical Scope
In JS, the scope is defined by Lexical Scope. Lexical Scope is defining the scope at author time based on where the functions are placed.
But there are two other ways to overwrite the lexical scope in JS. Those are JS core functions which will manipulate the scope at runtime. Those are,
1) eval() function
Eval function takes a string as an input and executes the content in the scope of the code execution.2) with() function
Takes an object as the input and consider the object as a new separate lexical scope.
function foo(obj) { with(obj){ console.log(x); } } foo({x:5}); // will print "5"
Cheating lexical scope makes the code performance intensive so better to avoid it.
Nested Scopes
In JS we can define different levels of scopes. The most outer scope is global scope and new scopes will be defined as nested scopes when we are creating functions or blocks.
var a = 5; function foo(x) { var b = 10; }
In above example "a" is in global scope and "b" is in a new function scope.
When Javascript engine finds a variable in an inner scope engine starts searching for it in the given scope and if it isn't there, it checks the variable in the immediate outer scope and likewise it traverse until it finds the variable and returns it. Once it reaches the most outer scope, it automatically stops traversing.
There is a really tricky part in how the fall back happens when the engine cannot find a defined variable in any given scope. If a variable is not found in any parent scope and if it's for an assignment purpose, then a new variable will be created in the global scope. You should be really careful on this.
var a = 5; function foo(x) { b = 10; }
When Javascript engine finds a variable in an inner scope engine starts searching for it in the given scope and if it isn't there, it checks the variable in the immediate outer scope and likewise it traverse until it finds the variable and returns it. Once it reaches the most outer scope, it automatically stops traversing.
Note: Global variables are automatically being part of the global object. In browser, it's the window object. So you can create global variables as "window.a". Using this technique you can access the variables in the global scope without getting affected from shadowing. Ex:
var a = 5; function foo() { var a = 10; console.log(a); // will print "10" console.log(window.a); // will print "5" } foo()
This will print two lines as follows.
10 5
There is another interesting point demonstrated in the above example. It's shadowing.
Shadowing
Overriding the outer scope variables in inner scopes. Shadowing is commonly used in JS which allows developers to isolate variables within functions while using same variable names.
Since scope is really powerful as well as dangerous when misusing it, there are identified best practices to avoid surprises. All these best practices are targeting common objectives such as avoiding spoiling global scope, isolate variables in function scope as much as possible. Following are some of such best practices.
Isolate in objects
It's a best practice to create an object in the global namespace and define variables and functions as properties of the object. In this way, we will only define a limited number of variables in the global scope and all the other variables will be properties of carrier objects.
var myLibrary = { foo: function() { console.log('this is foo'); }, x: 5 } myLibrary.foo(); // will print "this is foo"
Module Managment
Most of the modern JS libraries wraps its variables in a module and expose via dependency management. When using these libraries in code, we have to import scope into another object scope which will prevent spoiling the global scope.
Will be covered more under Closure section.
Functions as Scope
When we have named functions, it pollutes the global name space. That can be avoided with following technique by treating function as an expression rather than a declaration.
(function foo() { console.log('How are you'); })(); // will print "How are you"
Also you can pass a variable into the function as follows.
(function foo(x) { console.log(x); })("Hi"); // will print "Hi"
In above code first () make the function an expression and second () execute the expression.
Anonymous vs Named functions
Function expression can be anonymous but function declaration cannot be anonymous. It's prefer to have named function which has less drawbacks than anonymous functions.
Following are valid syntaxes because there the function is an expression.
var x = function(x) { console.log(x); } x('wow'); // will print "wow" (function(x) { console.log(x); } )('wow'); // will print "wow"
Following syntax is invalid because the there we use a function declaration.
function(x) {
console.log(x);
}
Blocks as Scope
Generally if we define a variable with var keyword it belongs to the scope beyond the block and applicable for the whole scope.
if (true) { var n = "How are you"; } console.log(n); // will print "How are you"
In above code variable "n" will belong to global scope. That happens becuase of variable hoisting in JS engine.
Variable Hoisting
Variables and function declarations are move to the top of the scope block. In here subsequent function declarations will override the previous.
a = 2; var a; console.log(a) // will print 2 console.log(a); // will print undefined a = 2; var a;
But if you define a variable with "let" keyword, it'll only belong to the current block. Variable declarations with "let" keyword will not effect to variable hoisting.
if (true) { let m = "How are you"; } console.log(m); // will give an error
You can create a constant variable using const keyword and it's scope will be limited to the current block.
if (true) { const m = "How are you";
m = "Changed"; // will give an error }
Closure
What is Closure?
Closure is when a function is able to remember and use it's lexical scope even when the function is executing outside of the lexical scope.
Closure is one of the least understood features in JS, but it is one of the most powerful features in JS.
function foo(a) function bar() { console.log(a); } return bar; } var baz = foo(2); baz() // will print 2
In above example, "bar" still has the reference to the scope of a function, and that reference is called closure.
Closure is heavily used in JS programming all over the programs. One of it's main application is there when developers create modules to isolate and expose variables and functions to outside.
Modules
Function return an object with references for internal functions. Those function will run outside the defined lexical scope and it's a good example for a closure.
function myModule(a, b) { function sum() { return a +b; } function substract() { return a - b; } return { sum: sum, substract: substract } } var operations = myModule(2, 4); operation.sum() // Will print 6
This is a great way to keep the global scope clean as well expose necessary components to outside while maintaining an internal state of the module.
Now we have come to the end of this article about Javascript Scope and Closure concepts. Hope you got some quick interesting points about them and if you need further readings it's highly recommend to read the series of "You Don't know Javascript" books. I'll bring some more interesting points in my next article about Javascript Objects and Prototyping.
wow i just stumbled with your explanation here. And i am interested to know more like this. So please keep update like this.
ReplyDeleteEmail Marketing Chennai
Great Article… I love to read your articles because your writing style is too good, its is very very helpful for all of us and I never get bored while reading your article because, they are becomes a more and more interesting from the starting lines until the end.
ReplyDeleteweb designing training in chennai
Very nice post here and thanks for it .I always like and such a super contents of these post.Excellent and very cool idea and great content of different kinds of the valuable information's.
ReplyDeleteIELTS Coaching in Chennai
Wonderful bloggers like yourself who would positively reply encouraged me to be more open and engaging in commenting.So know it's helpful.
ReplyDeletePTE Coaching in Chennai
For beginners and also for intermediate in javacript this blog is really helpful as it mainly focuses on scope and types and also functions.
ReplyDeleteDigital Marketing Company in India
Wow it's an amazing blog, thank you for sharing the information..
ReplyDeleteMicrosoft Azure Training in Chennai
AWS Training in Chennai
There are lots of information about latest technology and how to get trained in them, like this have spread around the web, but this is a unique one according to me. The strategy you have updated here will make me to get trained in future technologies. By the way you are running a great blog. Thanks for sharing this.
ReplyDeleteWeb development Company in India
This blog is having the general information. Got a creative work and this is very different one. We have to develop our creativity mind. This blog helps for this. Thank you for this blog. This is very interesting and useful.
ReplyDeleteSelf Employment Tax
Tax Preparation Services
Tax Accountant
Tax Consultant
Tax Advisor
This is very important for web designers perfection is most important. This article contains some of the most informative content. I think much like this writer. It is a very valuable and helpful collection of blogs.
ReplyDeleteWeb
development Company in India
This information is impressive; I am inspired with your post writing style & how continuously you describe this topic.
ReplyDeleteEczema Treatment
This is a great article, I have been always to read something with specific tips! I will have to work on the time for scheduling my learning.
ReplyDeletePeridotsystems
Hadoop Training in Chennai
I appreciate your style of writing because it conveys the message of what you are trying to say. It's a great skill to make even the person to understand the subject . Your blogs are understandable and also informative. I hope to read more and more interesting articles from your blog. All the best.
ReplyDeletePsoriasis Treatment
Very nice post here thanks for it .I always like and such a super contents of these post.Excellent and very cool idea and great content of different kinds of the valuable information's.
ReplyDeleteBusiness Tax Return
Cpa Tax Accountant
Tax Return Services
Great.Nice information.It is more useful and knowledgeable. Thanks for sharing keep going on..
ReplyDeleteSEO company in India
Thanks for sharing, Really it is an amazing article I had ever read. I hope it will help a lot for all. Thank you so much for this amazing posts and please keep update like this.
ReplyDeleteSEO Company in Chennai
Its really very useful topic. Thanks for sharing this information...
ReplyDeleteSAP FICO Training in Chennai
ReplyDeleteThis is so informative blog and i have used this 5 minutes thing very useful too happy with this blog........
SAP FICO Training in Chennai
It is a very useful and informative blog. Keep on sharing like this information...
ReplyDeleteSAP MM Training in Chennai
This comment has been removed by the author.
ReplyDeleteThis is very nce one.. really spend time with good thing.... i will share this to my frends...thank you so much for this post....
ReplyDeletewaiting for the next blog.....
OFFERS IN CHENNAI
It is really a great and useful piece of info. I’m glad that you shared this helpful info with us. Please keep us informed like this. Thank you for sharing.
ReplyDeleteBest Interior Designers in Chennai
Industrial Architecture
Warehouse Architect
Factory Architect Chennai
I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I’ll be subscribing to your feed and I hope you post again soon.
ReplyDeleteManufacturing ERP
Human Resources Management Software
CCTV Camera Dealers in Chennai
Indian Cyber Army’s summer internship is live now. Here internship will give you on-the-job experience, help you learn whether you and Cyber security industry are a good match and can provide you with valuable connections and references. Here interns are usually exposed to a wide variety of tasks and responsibilities which allows the intern to showcase their strengths by working on projects for various managers that work on different parts of Indian Cyber Army. Start your career in ethical hacking by working with Indian cyber army. https://www.ica.in/internships/summer-internship
ReplyDeleteThat information are very helpful tips, thanks for share great info.
ReplyDeleteWeb Designing Institute Delhi
Web Development Training
SEO Course
PPC Training Delhi
SMO Course Delhi
Your explanation approach is different and innovative towards coding keep updating more like this looking forward more:
ReplyDeleteBest Architects in Chennai
Turnkey Interior Contractors in Chennai
Architecture Firms in Chennai
Warehouse Architect
Factory Architect Chennai
Office Interiors in Chennai
Rainwater Harvesting chennai
Your explanation approach is different and innovative towards coding keep updating more like this looking forward more:
ReplyDeleteBest Architects in Chennai
Turnkey Interior Contractors in Chennai
Architecture Firms in Chennai
Warehouse Architect
Factory Architect Chennai
Office Interiors in Chennai
Rainwater Harvesting chennai
Really superb!!! I read your blog regularly and your content is truly good. I thank you for your effective and useful post.
ReplyDeleteIELTS coaching in Chennai
IELTS coaching centre in Chennai
IELTS Training in Chennai
Best IELTS coaching in Chennai
Best IELTS coaching centres in Chennai
IELTS classes in Chennai
such an effective blog you are posted.this blog is full of innovative ideas and i really like your informations.i expect more ideas from your site please add more details in future.
ReplyDeleteSelenium Training in Chennai
Selenium Training
Selenium Training in Velachery
Selenium Training in Tambaram
Hadoop Training in Chennai
JAVA Training in Chennai
Superb. I really enjoyed very much with this article here. Really it is an amazing article I had ever read. I hope it will help a lot for all. Thank you so much for this amazing posts and please keep update like this excellent article. thank you for sharing such a great blog with us.
ReplyDeletebest rpa training in bangalore
rpa training in pune | rpa course in bangalore
RPA training in bangalore
rpa training in chennai
i read the above notes and clarify my doubts very well.in this information i observe lot of things about how to study.thanks a lot.
ReplyDeleteUiPath Training in Chennai
UiPath Training Institutes in Chennai
RPA Training in Chennai
RPA course in Chennai
Blue Prism Training Chennai
UiPath Training in Anna nagar
UiPath Training in T Nagar
ReplyDeletethe blog helps to my research.this blog is related to my technology.thank you for the important blog.
Hibernate Training in Chennai
Hibernate Training
Spring Training in Chennai
Spring Hibernate Training in Chennai
Struts Training in Chennai
Struts course in Chennai
Hibernate Training in Velachery
Hibernate Training in Tambaram
the article is very nice to study and really enjoying that.its help me to improve my knowledge and skills also.im really satisfied in this session.
ReplyDeleteData Analytics Courses in Chennai
Big Data Analytics Courses in Chennai
Machine Learning institute in Chennai
Machine Learning Training in Chennai
DevOps Training in Chennai
Data Science Training in Anna Nagar
Data Science Training in T Nagar
Thank you so much for these kinds of informative blogs.
ReplyDeletewe also providesseo services
website designing in gurgaon
best website design services in gurgaon
web company in delhi
web desiging company
web design & development banner
web design & development company
web design & development services
web design agency delhi
web design agency in delhi
web design and development services
web design companies in delhi
web design company delhi
web design company in delhi
web design company in gurgaon
web design company in noida
web design company list
web design company services
web design company website
web design delhi
web design development company
web design development services
web design in delhi
web design service
web design services company
web design services in delhi
web designer company
web designer delhi
web designer in delhi
web designers delhi
web designers in delhi
web designing & development
web designing advertisement
web designing and development
web designing and development company
web designing and development services
web designing companies in delhi
web designing company delhi
web designing company in delhi
web designing company in gurgaon
web designing company in new delhi
What a fantastic post! This is so chock full of useful information I can't wait to dig deep and start utilizing the resources you have given me. your exuberance is refreshing
ReplyDeleteyou've outdone yourself this time
This is probably the best, most concise step-by-step guide I've ever seen on how to build a successful blog. i am also writing blog about the kindly review it french language institute in delhi .
Thank you for providing nice content
ReplyDeleteData Analytics Training Delhi
R Programming Training noida
Python training noida
Free python course
R programming training ghaziabad
PHP training ghaziabad
R programming training delhi
Python training in delhi
Data Analytics Training Noida
Python training in ghaziabad
php training in delhi
php training in noida
open source web development course
full stack web development course
Thank you
ReplyDeleteWordPress Training in Delhi
PHP Training in Delhi
HTML,CSS,JQuery Training in Delhi
Data Analytics Trainingp in Delhi
R Programming Training in Delhi
Web Designing Training in Delhi
MIS Training in Delhi
Python Training in Delhi
SAS Training in Delhi
jalal abad state university jasu mbbs in kyrgyzstan
ReplyDeleteosh medical university oshmu mbbs in kyrgyzstan
medical college for women and hospital mbbs in bangladesh
lviv national medical university mbbs in ukraine
kyrgyz state medical academy ksma mbbs in kyrgyzstan
kazakh national medical university knmu mbbs in kazakhstan
asian medical institute asmi mbbs in kyrgyzstan
international higher school of medicine ism mbbs in kyrgyzstan
bogomolets national medical university mbbs in ukraine
vinnytsia national pirogov medical university vnmu mbbs in ukraine
very nice article. keep up the good work.
ReplyDeletestudy mbbs abroad