函数

 

变量以及作用域

  • 函数内生命的变量,则改变量的作用域为这个函数体,函数外部不可用。
  • 如果有两个函数,两个函数内声明了相同的变量,该变量只在各自函数体内起作用,即函数体内声明的变量互相独立,互不影响。
  • 当函数嵌套函数时,内部函数可以访问外部函数的变量,反过来则不行。
  • var 和 let 声明一个变量。
  • const定义一个常量,常量不可以修改。let和const都具有块级作用域。

 

方法

在一个对象内绑定函数,称为这个对象的方法。

var xiaoming = {
    birth: 1990,
    age: function(){
        var y = new Date().getFullYear();
        return y - this.birth
    }
}

xiaoming.age()//29

一个方法内部,this为一个特殊的变量,永远指向的是该对象,也就是xiaoming这个变量,this.birth可以拿到的是xiaoming里面的birth属性。

function getAge(){
    var y = new Date().getFullYear();
    return y - this.birth
}
var xiaoming = {
    birth: 1990,
    age: getAge
}

xiaoming.age()//29
getAge()//NaN

调用 getAge() 时,this指向的是全局window,由于全局未定义birth这个变量,所以返回的结果为NaN。而xiaoming.age()调用getAge()时this指向的是xiaoming这个对象。注意

var xiaoming = {
    birth: 1990,
    age: function(){
        var y = new Date().getFullYear();
        return y - this.birth
    }
}

var fn = xiaoming.age;
fn()//NaN

此时的this指向也是不正确的,须用obj.xxx()调用。

var xiaoming = {
    name: '小明',
    birth: 1990,
    age: function () {
        function getAge(){
            var y = new Date().getFullYear();
            return y - this.birth;
        }
        return getAge()
    }
};
xiaoming.age()//NaN

this只指在age方法的函数中指向xiaoming,在方法的函数的内部函数中,指向又为undefined。修改方法:

var xiaoming = {
    name: '小明',
    birth: 1990,
    age: function () {    
        var that = this;
        function getAge(){
            var y = new Date().getFullYear();
            return y - that.birth;
        }
        return getAge()
    }
};
xiaoming.age()//29

apply和 call 

指定函数 this 指定哪个对象时,可用函数本身方法apply,call。apply接收另两个参数,第一个参数就是需要绑定的this变量,第二个参数为Array。call与apply的区别就是参数按顺序传入

function getAge(){
    var y = new Date().getFullYear();
    return y - this.birth;
}
var xiaoming = {
    name: '小明',
    birth: 1990,
    age:getAge
};

getAge.apply(xiaoming,[])//29
getAge.call(xiaoming,null)//29

 

上一篇:winform下如何实现右下角弹窗效果


下一篇:C#中设置TextBox控件中仅可以输入数字且设置上限