函数类型

2018-04-24  本文已影响3人  米诺zuo
//1.函数没有重载
//2.函数表达式,函数为匿名函数,没有函数名,使用前必须先定义。
var f1 = function (){
    return 1;
}
//3.函数声明
 //函数声明提升,执行代码前,会先读取函数声明
function add(num){
    return  num+10;
}
function exeadd(somefunction,someargus){
    return somefunction(someargus);
}
var ssadd = exeadd(add,10);
console.log(ssadd);
3.函数内部属性
arguments 和 this 对象
//arguments

function factorial(num) {
    if(num <=1 ){
        return 1;
    }else {
        return num * factorial(num-1);
    }
}
//这个函数与函数名factorial 紧紧耦合在一起
function factorial(num) {
    if(num <=1 ){
        return 1;
    }else {
        return num * arguments.callee(num-1);
    }
}
console.log(factorial(5));  //120
//使用arguments 对象的 callee 属性 指向函数本身,实现解耦合
//严格模式下使用函数表达式的方式
var factorial = (function f(num) {
    if(num <=1 ){
        return 1;
    }else {
        return num * f(num-1);
    }
})
console.log(factorial(5));
//this 对象

//在 全局定义 this指的是 window
window.color = "red";
var o = { color: "blue" };
function sayColor(){
    console.log(this.color);
}
sayColor();            //red
//独立调用
//虽然test()函数被嵌套在obj.foo()函数中,但test()函数是独立调用,而不是方法调用。所以this默认绑定到window
var a = 0;
var obj = {
    a : 2,
    foo:function(){
        function test(){
            console.log(this.a);
        }
        test();
    }
}
obj.foo();//0
4.函数属性和方法
//length 函数的参数个数
//prototype
//call() 传递给函数的参数必须每个列出来
window.color = "red";
var o = { color: "blue" };
function sayColor(){
    console.log(this.color);
}
sayColor();            //red

sayColor.call(this);   //red
sayColor.call(window); //red
sayColor.call(o);      //blue

apply() 传入 this,arguments(或者 array)
function sum(num1, num2){
    return num1 + num2;
}

function callSum(num1, num2){
//return sum.call(this, num1, num2);
    return sum.apply(this,arguments)
}
alert(callSum(10,10));   //20
上一篇 下一篇

猜你喜欢

热点阅读