JavaScript学习-Function类型

版权声明:本文为博主原创文章,欢迎转载。 https://blog.csdn.net/fww330666557/article/details/78773073

一、函数的声明方式

普通方式

function box(num1, num2){
    return num1 + num2;
}

使用’变量初始化函数’

var box = function (num1, num2){
    return num1 + num2;
}

使用Function构造函数(不推荐)

var box = new Function('num1','num2','return num1 + num2');

作为值的函数

函数名本身就是变量,所以函数也可以作为值来使用。

function box(sunfunction,num){
    return sunfunction(num);
}
function sunfunction(num){
    return num + 10;
}
var result = box(sunfunction,10);
document.write(result);

输出:

20

函数内部属性

函数内部有两个特殊的对象,arguments和this.

1、arguments

arguments是一个类数组对象,保存传入函数的所有参数,该对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。

一个简单的递归:

function box(num){
    if(num <= 1){
        return 1;
    }else{
        return num * box(num-1);
    }
}

使用callee代表自身:

function box(num){
    if(num <= 1){
        return 1;
    }else{
        return num * arguments.callee(num-1);
    }
}

2、this

windown是一个对象,而且是JS里面最大的、最外围的对象。
所有的全局变量都是window的属性。
在全局范围内,this就代表的是window。
构造函数中this,代表的是实例本身。

函数的属性和方法

既然函数也是对象,那么函数也可以有属性和方法。每个函数都有两个属性,length和prototype。其中length是函数希望接收的命名参数的个数。prototype属性是保存所有实例方法的真正所在,也就是原型。

prototype下有两个方法,apply()和call(),每个函数都包含这两个非继承而来的方法,其用途都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。

apply和call可以冒充另外一个函数,如以下例子:

function box(num1,num2){
    return num1 + num2;
}

function sum(num1, num2){
    return box.apply(this,[num1, num2]);
}
function sum2(num1, num2){
    return box.apply(this,arguments);// arguments可以当作数组传递
}
function sum(num1, num2){
    return box.call(this,num1,num2);//call只是传递参数不用,其他与apply一样
}

事实上传递参数并不是apply()和call()方法真正的用武之地,它们经常使用的地方是能够扩展函数赖以运行的作用域。

扫描二维码关注公众号,回复: 3275794 查看本文章
var color = "红色的";// 全局

var box = {
    color :'蓝色的'// 局部
}

function sayColor(){
    document.write(this.color);
}

//sayColor();// 全局,输出'红色的'
sayColor.call(box);// 局部,冒充box,作用域在box对象里,所以就输出'蓝色的'

猜你喜欢

转载自blog.csdn.net/fww330666557/article/details/78773073
今日推荐