zoukankan      html  css  js  c++  java
  • javascript函数的调用及有关隐式参数(arguments和this)的学习

    ##一、函数调用的几种不同方式:
    ####1、作为一个函数进行调用
    ####2、作为一个方法进行调用,在对象上进行调用,支持面向对象编程
    ####3、作为构造器进行调用,创建一个新对象
    ####4、通过apply()或call()方法进行调用,这种方式相对最复杂


    ##二、函数调用都会传递两个隐式参数并存在于函数的作用域内:arguments和this
    ###函数传参和形参不一致如何处理:
    ####1、实参>形参--》超出部分实参不会分配
    ####2、实参<形参--》没有对应的形参分配为undefined


    ##三、
    ####1、函数上下文:依赖于函数的调用方式(四种调用方式)。
    ####2、arguments:所有参数的集合,并有length属性,使用arguments[2]等获取;但arguments不是数组,没有数组的那些方法
    ####3、this:引用了与该函数调用进行隐式关联的一个对象,称之为函数上下文


    ##四:
    ####1、“作为函数”调用:指上面四种的第一种方式,有别于其他三种
    例如:function test(a,b){}/var test = function(a,b){}
    此时的函数上下文是window,即**this==window**

    ####2、“作为方法”调用:当函数被赋值给一个对象,并使用引用该函数的这个属性时
    I、一个方法所属的对象在该方法体内可以以this调用
    var o = {};
    o.test = function(){};
    o.test();
    此时的函数上下文是o这个对象,即**this==o**

    ####3、“作为构造器”调用:和函数声明一样,区别于如何调用该函数,在函数调用前使用new关键字
    function test(){return this};
    new test();

    ###构造器的特别之处:
    ####I.创建一个新的空对象
    ####II.传递给构造器的对象是this对象,从而成为构造器的上下文
    ####III.如果没有显式的返回值,新创建的对象则作为构造器的返回值进行返回
    function Ninja(){
    this.skulk = function(){return this};
    //无显式返回,故返回this===o
    }===function Ninja(){
    var o = {};
    o.skulk = function(){return this;};
    return o;
    }
    var ninja1 = new Ninja();
    var ninja2 = new Ninja();
    ninja1.skulk === ninja1;
    ninja2.skulk === ninja2;

    ####apply()和call()方法:显式的指定任何一个对象作为函数上下文
    apply()需要两个参数:1、作为函数上下文的对象2、作为函数参数所组成的数组
    call()也需要两个参数:区别是第二个参数是一个参数列表

    ##可以让任何元素作为apply()和call()的上下文

  • 相关阅读:
    E4A易安卓3.6无需注册编译Release
    PHP中几种常用的网页跳转代码
    超详细教你重新封装GHO(ndeer和绿茶)教程
    程序员和编码员之间的区别
    迅闪三层下载游戏无速度
    POST注册DZ论坛或发帖
    解决局域网文件共享设置
    妻子 情人 红颜知己
    照片与同行元素居中的方法
    【转】SVN使用教程总结
  • 原文地址:https://www.cnblogs.com/jinxiao/p/7601920.html
Copyright © 2011-2022 走看看