js—函数的调用

函数在声明后不会直接应用,需要进行调用才能运行

调用方法:

  • new Object();
  • 函数名(实参列表);

function jc(n){
   if(n == 1){
      return 1;
   } else {
      return n*arguments.callee(n-1);  //arguments.callee:用来指向拥有这个arguments对象的函数
   }                                     此处也就是函数jc(n)
}
var result = jc(10);  //方法一   函数名(实参列表)

console.log(result);


  • 函数名.call(执行环境对象,实参列表);

function foo(a,b,c){
    console.log(this,a,b,c);
}

foo(1,2,3);
foo.call({msg:'hello'},1,2,3)  //方法二   函数名.call(执行环境对象,实参列表);

此处的执行环境对象就是console.log(this,a,b,c)中this所指的(因为this指向的是函数赖以执行的环境对象,此处this指向global


  • 函数名.apply(执行环境对象,实参列表数组);

function foo(a,b,c){
    console.log(this,a,b,c);
}

foo(1,2,3);

foo.apply({msg:'hello'},[1,2,3])  //方法三   函数名.apply(执行环境对象,实参列表数组);


函数的内部属性   只有在函数的内部才能访问的属性

  •  arguments

         是类数组对象,包含着传入函数中参数,arguments对象还有一个callee的属性,用来指向拥有这个arguments对象的函数

function add(a,b){
    console.log(arguments);          //所有的实参都在这里
    console.log(arguments.length);   //数组长度
    console.log(arguments.callee);   //用来指向拥有这个arguments对象的函数
    var total = a+b;
    return total;
}

var result = add(1,2,3,4);
console.log(result);

输出结果:{ '0' : 1, '1' : 2, '2' : 3, '3' : 4 }    

                  4

                  {Function : add}    //arguments.callee所指向的函数,add

                  3

  •  this

         指向的是函数赖以执行的环境对象

              sayHello();           this  指向  global/window
              obj.sayHello();     this  指向  obj
              a.sayHello();        this  指向  a

              如何判断this指向谁:根据()前面的内容

实例:

var sayHello = function(){
    console.log('hello',this);
}

var gender = 'male';
var obj ={
    name:'xpf',
    age:22,
    gender:gender,
    sayHello:sayHello
}


sayHello();      //this指向global
console.log("=================");  //分隔符
obj.sayHello();  //this指向obj

输出结果:

              

可以看出:

    sayHello();   this指向的是global(====上面一大串的东西)

    obj.sayHello();  this指向的是obj

猜你喜欢

转载自blog.csdn.net/qq_42720683/article/details/82178842