• Js 函数


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

    1.arguments:包含传入函数的所有参数,主要用于保存函数参数,它可以看做是一个数组

    function fn(num1,num2){
        console.log(arguments);
    }
    fn(100,200);  //{'0':100,'1':200}
    
    //arguments有一个callee的属性,它是一个指针,用来指向当前这个函数
    //例如一个递归调用,阶乘函数,里面的arguments.callee就是等价于这个函数
    function factorial(num){
        if(num<=1){
            return 1;
        }
        else{
            return num*arguments.callee(num-1);
        }
    }

    2.this:指向调用这个函数的对象

    //全局作用域下
    var hi = 'hi';
    //一个普通object对象
    var obj = { hi = "obj hi"};
    function say(){
        console.log(this.hi)
    }
    
    //say函数在全局作用域下定义,直接执行,this将指向window对象,所以hi是windows对象的。
    say();  //hi  
    
    //将say赋予obj对象,并且obj来调用say,这次this将指向obj对象
    obj.say = say;
    obj.say();  //obj hi


    1.length属性:函数接受参数的个数

    function fn(n,m){};
    alert(fn.length); //2

    2.prototype属性:后面博客再说,厉害嘞

    3.apply()和call()方法:扩充函数依赖的运行环境。就像是把一个函数给一个个的对象使用。

    var color = "red";
    var obj = {color: "green"};
    //先声明一个函数
    function fn(){
        console.log(this.color);
    }
    //给window对象用
    fn.call(window);  //red
    //给obj对象用
    fn.call(obj);   //green

    apply和call功能是一样的:不同就是接受参数不同,大家第一个参数都是作用域对象,后面的apply接收一个参数数组,call则是接收一个个参数。

    //声明一个函数add
    function add(num1,num2){
        return num1+num2;
    }
    //在另一个函数调用,第一个是this,后面参数一个个输入
    //这里用call
    function otherAdd(n1,n2){
        return add.call(this,n1,n2);
    }
    //这里用apply,第一都是this,后面接受参数变成数组形式
    function otherAdd(n1,n2){
        return add.apply(this,[n1,n2]);
    }
     
  • 相关阅读:
    数据挖掘中所需的概率论与数理统计知识、上
    pig语法学习 FOREACH GENERATE group AS
    pig flatten
    F-stack及其Nginx、redis的编译安装
    f-stack中nginx配置后make出现error: ignoring return value of ‘ftruncate’
    高速网络流量测量方法的记录
    DPDK测试用例(sample)编译
    VPP(Vector Packet Processing)配置工具
    DMA(Direct Memory Access)简介
    VPP(Vector Packet Processing)浅析
  • 原文地址:https://www.cnblogs.com/yelongsan/p/7735850.html
Copyright © 2020-2023  润新知