Home > Web Front-end > JS Tutorial > JavaScript Advanced Features - Scope Sample Code Details

JavaScript Advanced Features - Scope Sample Code Details

黄舟
Release: 2017-03-13 16:48:52
Original
1190 people have browsed it

Scope is divided into global scope and local scope in javascript, and local scope actually refers to function scope. JavaScript uses function as the minimum scope of scope.

Global Scope

Object that can be accessed anywhere in the code, such as the window object and the properties of the window object, It has global scope.
1. Variables defined in the outermost layer are all attributes of the window object by default;
2. Undefined variables are global by default and are also attributes of the window object by default; This is a common mistake error, but the new version of the browser has fixed this problem!
For example:

var firstName = "leo";
function changeName() {
    var secondName = "jut";
    fullName = "jutleo";
    function getName() {
        console.log(secondName);
    }
    getName();
}
console.log(firstName);
console.log(fullName);//报错
// console.log(secondName);//报错
changeName();
// getName();//报错
Copy after login

Local Scope/Function Scope(Local Scope/Function Scope)

When defining a variable in a function, this variable is only visible to the current function, javascript It will search the scope of the current function. If it is not found, it will continue to search upward until it is not found in the global scope and it will return undefined;

var version = "version_1";
var f1 = function() {
    console.log(version);//version_1
}
f1();
Copy after login

If it is not found in the f1 function, continue to search upward

var version = "version_1";
var f2 = function() {
    var version = "version_2";
    console.log(version);//version_2
}
f2();
Copy after login

Find directly in the f2 function

var socpe = "scope_01";
var f3 = function() {
    console.log(scope); //undefined
    var scope = "scope_02";
}
f3();
Copy after login

Why is this? It turns out that javascript searches for the scope variable in the f3 function and finds it. At this time, the outer scope is ignored, but when execution reaches console.log(scope), the scope has not been initialized, so it returns undefined

var f4 = function() {
    var scope = "scope_02";
    (function(){
        var scope = "scope_03";
        (function(){
            console.log(scope); //scope_03
        })();
    })();
}
f4();
Copy after login

Nesting must follow the same rules. First search inside the function. If not found, continue to the upper level!

var x_scope = "leo";
var f5 = function() {
    console.log(x_scope); //leo
}
var f6 = function() {
    var x_scope = "jut";
    f5();
}
f6();
Copy after login

Why is this? It turns out that when JavaScript functions are nested, the scope is determined by the nesting relationship, and the order of calls is ignored!

Having said so much, how to use this scope? We can see from the above examples that when JavaScript searches for variables, the chain that goes up in order is the scope chain. In actual applications, the deeper the position of the variable, the slower the reading and writing speed until it is found in the global scope.

Look at the example:

function setLabelBgColor(){
    document.getElementById("btn").onclick=function(){
        document.getElementById("label").style.backgroundColor="red";
    };
}
Copy after login

According to the search logic of the scope chain, the search for the document variable must traverse the entire scope chain until it is finally found in the global object. This function is referenced twice. The optimization is as follows:

function setLabelBgColor(){
    var doc = document;
    doc.getElementById("btn").onclick=function(){
        doc.getElementById("label").style.backgroundColor="red";
    };
}
Copy after login

This is just an example. Doing this will not significantly improve performance! However, in actual use, it is necessary to avoid the situation where global variables are accessed in large quantities.

(function(exports){
    //do some thing ...
})(window);
Copy after login

Think about it, why do all the libraries and frameworks you see start like this?


The above is the detailed content of JavaScript Advanced Features - Scope Sample Code Details. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template