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!