Home >Web Front-end >JS Tutorial >JavaScript var and this, {} and function

JavaScript var and this, {} and function

php中世界最好的语言
php中世界最好的语言Original
2018-03-16 14:23:492116browse

This time I will bring you JavaScript’s var and this, {} and function, Use JavaScript’s var and this, {} and function NotesWhat are the following? Let’s take a look at the actual cases.

JavaScript var is used to define a variable, and this is often used to define or call a property or method. But in the global scope, this and vardefining variables are equivalent.

window

 console.log('window:', name); var name = 'stone'; this.name = 'niqiu';
 console.log('var:',name);
 console.log('this:',this.name);

window object has a name attribute, and the initial value is empty, but when the first console How to get the value? It is found that this window records the last value. Reopen the page and just execute console.log('window:', name); and the output is empty.

  console.log('window:', name);  var name = 'stone';

RefreshAfter two timesoutput stone. So the window object is not re-created when refreshed. window is a {} object. There is no constructor and cannot be new.

function and {}

Inside the function, var defines local variables, and this defines attributes. These two are not covered. But newly created objects cannot obtain local variables.

     var Fool = function () {            var name = 'stone';            var nikename = 'stoneniqiu';            this.name = 'niqiu';            this.getName = function () {
                console.log('var', name);
                console.log('this', this.name);
            };            this.getNickname = function() {                return nikename;
            };
        };
    console.log(f.name); //niqiu
    console.log(f.nikename);//undefined
    console.log(f.getNickname());//stoneniqiu

But if you use {} to define an object, all internal variables are properties.

  var block = {
            name: 'stone',
            nickname:'stoneniqiu',
            getName: function () {                // return this.name;//stone
                return name; //'windows name';            },
            getNickname:function() {                return this.nickname;
            },
            printAllName:function() {
                console.log(this.getNickname());
                console.log(this.getName());
            }
        };
       console.log(block.name);//stone
       console.log(block.getName()); //windows name

Like the window object, the object created by {} cannot be new because there is no constructor.

So if the object is reused and is relatively large, it is better to use the function form to separate private variables and public properties or methods. The internal module of the function can use {} form.

The methods that can obtain the context to which they belong through this are called public methods. The binding of this to the object occurs at the time of call. This "super" delayed binding allows the function to highly reuse this.

This refers to the currently executed object, to avoid this changing. A variable is often used to temporarily store this.

var self=this

Magical callback

Let’s look at an example. The callback method is defined in the parameters of the object, but a method we passed in to Fool itself was actually executed.

 var Fool = function (config) {           var parmas = {
               callback: function() {
                   console.log('raw callback');
               }
           };
           parmas = $.extend(parmas, config);           var name = 'stone';           var nikename = 'stoneniqiu';           this.name = 'niqiu';           this.getName = function () {
               console.log('var', name);
               console.log('this', this.name);
           };           this.getNickname = function () {               return nikename;
           };           this.doSomething = function () {
               parmas.callback();
           };
       };       var f = new Fool({callback:function() {
           $("#bt").click(function() {               f.getName()
           });
       }});
       f.doSomething();

Run without error, click the button to trigger the getName method. But if you write like this directly, an error will be reported, which is very common sense.

 var f = new Fool({callback:f.getName()});

If you modify it again and wrap it with anonymous function, it can still run.

var f = new Fool({callback:function() {             (function() {
               f.getName();
            })();
       }});
       f.doSomething();

I figured it out today that this is actually a closure problem. The f.getName() executed inside the function is equivalent to a variable. It binds the external f, not the f at the moment the function is constructed. So when the anonymous function is constructed, it does not care whether f is created. Equivalent to the following classic question:

var addhandle=function(node){var ifor(i=0;i<node.length;i++){
 node[i].onclick=function(e){
 alert(i);
} 
}
}

If the above method is executed, the binding is i after the loop ends. Instead of looping through i at that moment. If the code in the above loop is modified as follows.

nodes[i].onclick=function(i){ return function(e){
 alert(e)
 }
}(i)

is the variable i when the function is constructed.

I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!

Recommended reading:

Event management in JavaScript

##Detailed explanation of Promise in jQuery, Angular, and node

The above is the detailed content of JavaScript var and this, {} and function. 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