zoukankan      html  css  js  c++  java
  • 函数里的两个特殊对象

    一、函数内部两个特殊的对象:1 arguments(数组对象) 2 this
    function sum(num){ //阶乘,递归
    return num*sum(num-1);
    }
    sum(4);--24
    function sum(num){
    return num*arguments.callee(num-1);
    }
    sum(4)--24
    arguments.callee();调用自身,实现函数递归
    callee是arguments对象的属性,指向拥有这个arguments这个对象的函数。

    二、window是个对象,是js里面最大的对象,是最外围的对象,表示全局。
    var color="红色的";==window.color="红色的";==this.color="红色的";
    1全局的变量是window对象下的属性
    2在全局作用域中,this指的就是window对象。

    var box={
    color:"蓝色的", //这里的color是box下的属性,是局部变量box.color="蓝色的";
    sayColor:function(){
    alert(this.color); //这里的this指的box这个对象
    }
    }

    三、函数是对象,所以也有自己的属性和方法,每个函数都包含的两个属性:length和prototype
    1 length:函数的参数个数
    function box(name,age){
    return name+age;
    }
    alert(box.length);---2 即这个函数有两个参数

    2 prototype下的两个方法:apply和call,使用它们,可以冒充另外一个函数去执行。
    function box(num1,num2){
    return num1+num2;
    };
    alert(box(10,10)); ----20

    function sum(num1,num2){
    return box.apply(this,[num1,num2]);
    //this指的是window对象,因为box是在window作用域下的;[]数组里面是传递的参数,或者使用arguments代替[num1,num2]。
    }
    alert(sum(10,10));----20

    function sum(num1,num2){
    return box.call(this,num1,num2)
    //call和apply的区别仅仅是传递参数不同,apply是数组形式,call是一个参数一个参数的传。
    }

    用场:
    var color="红色的"; //全局的
    var box={
    color:“蓝色的” //局部的
    }
    function sayHello(){
    alert(this.color);
    }
    alert(sayHello());---红色的 ,因为sayHello函数是在window全局作用域下,所以,this指的也是window。

    如果使用call可以实现对象的冒充:
    sayHello.call(window)==sayHello.call(this)----红色的 作用域在window下
    sayHello.call(box) )----蓝色的 作用域在box下

    耦合:互相关联

  • 相关阅读:
    Java内存模型
    Thread.sleep(0)的作用
    Java中用到的线程调度算法是什么
    怎么检测一个线程是否持有对象监视器
    为什么要使用线程池
    ThreadLocal
    生产者消费者模型的作用
    线程间通信
    线程安全
    c#常日期转换(转)
  • 原文地址:https://www.cnblogs.com/annie211/p/6051882.html
Copyright © 2011-2022 走看看