Home >Web Front-end >JS Tutorial >js--scope of variables

js--scope of variables

巴扎黑
巴扎黑Original
2017-07-20 14:12:52958browse

As a rookie, it feels good to learn something every day. Today, when I was learning about closures, I saw the two concepts of scope and scope chain. I feel that as a novice with ambitions, it is necessary to understand them in detail.

The scope of variables

As far as js variables are concerned, there are global variables and local variables. I think this can be understood literally... Here's an example

var message = "今天我做的糯米蒸排骨"; //定义一个全局变量function doL(){

  var ss = "侠客行很好看";      //定义一个局部变量

  alert(message);             //输出"今天我做的糯米蒸排骨",在函数中可以引用到全局变量

  function alertDo(){

    alert(ss);

  }

  alertDo();             //输出"侠客行很好看",这就涉及变量的作用域了

};doL();
alertDo();              //没法输出  alertDo is not definedalert(message);         //可以输出"今天我做的糯米蒸排骨"

There are two very interesting places here

1 .When a variable is declared without var we are actually declaring a global variable. Well, this is wrong. See below, num is a global variable,

and mum = 1 ;

In fact, it is an attribute assignment operation. First, it will try to resolve the mum in the current scope chain (if declared in a method, the current scope chain represents the global scope and method local scope etc...); if it is in any current scope chain If mum is found in the scope chain, the assignment of the mum attribute will be performed; if mum is not found, it will be assigned to the global object (that is, the current scope chain Create the mum attribute in the top-level object (such as window object) and assign a value.

Notice! It does not declare a global variable, but creates a property of the global object. Since the variable declaration has the non-deletable attribute, compare var num = 1 with num = 1. The former is a variable declaration with the non-deletable attribute, so it cannot be deleted; the latter is an attribute of the global variable, so it can be deleted from the global variable. .

var num =1;
mum = 1;

2. The variable declaration will be advanced to the top of the function. In fact, we have encountered it before

    var scope="global";  function t(){  
        console.log(scope);  var scope="local"  
        console.log(scope);  
    }  
    t();

Undefined will be output first, then scope, which will declare variables in advance and overwrite local variables, which is equivalent to the following situation

    var scope="global";  function t(){  var scope;
        console.log(scope);  
        scope="local"  
        console.log(scope);  
    }  
    t();

The above is the detailed content of js--scope of variables. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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