In a function, the variables with var and without var Declaration are different. If var declares a local variable without var and a declared global variable, You can expose the interface to the outside. This article will discuss the differences between var and no var in the variable declaration in JavaScript, the scope of the variable declaration in Js is a function, so we often see that the method to avoid global variable pollution is
(function(){ // ... })();
In a function, the variables with var and without var Declaration are different. If var declares a local variable without var, the declared global variable can be used to expose the interface.
When declaring variables in the global scope, var and var look the same. We know that the declared global variables are the properties of the window. Are they the same, we use the feature query method provided by ECMAScrpit5 to identify the differences.
var fff = 2; window.ffa = 3; ffb = 4; this.ffc = 4; var ffftx = Object.getOwnPropertyDescriptor(window, 'fff'); //configurable:false,enumerable:true,value:2,writable:true var ffatx = Object.getOwnPropertyDescriptor(window, 'ffa'); //configurable:true,enumerable:true,value:2,writable:true var ffbtx = Object.getOwnPropertyDescriptor(window, 'ffb'); //configurable:true,enumerable:true,value:2,writable:true var ffctx = Object.getOwnPropertyDescriptor(window, 'ffc'); //configurable:true,enumerable:true,value:2,writable:true
Through the above, we found that there was still a difference. We used the delete attribute to verify that the attribute with the configuration property of false could not be deleted. That is, the attributes of global objects declared through the variable var cannot be deleted. We also find that the Global Object Attributes created with the function declaration cannot be deleted.
Delete fff; // delete ffa cannot be deleted; // delete ffb can be deleted; // delete ffc can be deleted; // delete
The conclusion is that the declaration of global variables with and without var is different.
It is legal and harmless to repeatedly declare statements using var statements. If the statement is declared repeatedly and has a value assignment, it is no different from the general value assignment statement. If you try to read a variable that has not been declared, Js will report an error.
In the function scope of JavaScript, declared variables or internal functions are visible in the function body. This means that the function may be available before being defined. There are two methods to define a function. One is a function definition expression and the other is a function declaration statement.
// Function Definition expression var fns = function () {//...}; // function declaration statement function fns (){//...}
The function declaration statement is "advanced" to the top of the external script or external function scope. Therefore, the function declared in this way can be called by defining the previous code. In Function Definition expressions, the declaration of variables is advanced, but the assignment of values to variables is not advanced. Therefore, functions defined in expressions cannot be called before function definition.
(Function () {testa (); // print testa testb (); // error: undefined is not a function console. log (testc); // undefined. If it is moved above, function testa () {console. log ("testa");} var testb = function () {console. log ("tesb");} var testc = "testc ";})();
Of course, we declare variables and functions, which must comply with the basic rules, and declare variables and functions in advance.