JavaScript中function的学习

//函数内部属性-arguments-callee:指向拥有这个arguments对象的函数
//递归:阶乘函数
function factorial(num){
    if(num <= 1){
        return 1;
    }else{
        return num * arguments.callee(num - 1);
    }
}
console.log("callee()使用:"+factorial(10));

//函数内部属性-this:指函数据以执行的环境对象
window.color = "red";
var o = {color :"blue" };
function sayColor(){
    console.log(this.color);
}
sayColor();//"red"
o.sayColor = sayColor;
o.sayColor();//"blue"

//函数内部属性-caller:保存着调用当前函数的函数引用
function outer(){
    inner();
    }
function inner(){
    console.log("caller:"+arguments.callee.caller);//返回outer函数的源代码
}
outer();

//函数属性-length:表示函数希望接收的命名参数的个数
function sayName(name){
    console.log(name);
}
function sayHi(){
    console.log("hi");
}
console.log("函数属性-length:"+sayName.length);//1
console.log("函数属性-length:"+sayHi.length);//0

//函数属性-prototype:保存所有实例方法,其属性不可枚举
//函数方法-apply()和call():在特定的作用域中调用函数,类似设置函数体内this对象的值
//函数方法-apply():接收两个入参,一个是其中运行函数的作用域,另一个是参数数组(可以是Array实例,也可以是arguments对象)
function sum(num1,num2){
    return num1+num2;
}
function applySum(num1,num2){
    return sum.apply(this,arguments);//传入arguments对象
}
function applySum2(num1,num2){
    return sum.apply(this,[num1,num2]);//传入数组
}
console.log("apply()"+applySum(10,12));//22
console.log("apply()"+applySum2(10,12));//22

//函数方法-call():第一个是其中运行函数的作用域,其余参数都直接传递给函数
function callSum(num1,num2){
    return sum.call(this,num1,num2);
}
console.log("call()"+callSum(10,12));//22

//函数方法-apply()和call()的重点:扩充函数赖以运行的作用域
window.year = "2018";
var cur = {year:'2019'};
function getYear(){
    console.log(this.year);
}
getYear.call(this);//2018
getYear.call(cur);//2019

//函数方法-bind():创建一个函数的实例,其this值会作为参数传给bind()函数
var instanceGetYear = getYear.bind(cur);
instanceGetYear();//2019

//函数方法-toLocaleString()和toString()、valueOf()返回函数代码
console.log("toLocaleString()"+getYear.toLocaleString());
console.log("toString()"+getYear.toString());
console.log("valueOf()"+getYear.valueOf());
image.gif

你可能感兴趣的:(JavaScript中function的学习)