`
zhangyaochun
  • 浏览: 2562654 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

函数调用浅谈

阅读更多

前言

 

        最近在写代码的时候,有很多函数调用方面的思考,简单整理,个人学习

 

        核心思想来自以前看烂了的好书《JavaScript语言精髓》

 

正文

 

        调用一个函数将暂停当前函数的执行,传递控制权和参数给新函数。除了声明时定义的形式参数,每一个函数接收两个附加的参数thisarguments

 

        关于this在下面四种函数调用方式中会主要介绍一下。

 

 

  • 方法调用模式
  • 函数调用模式
  • 构造器调用模式
  • apply和call调用模式(原书上没有加call,个人觉得加上比较好)
 
  1. 方法调用模式
       当一个函数被保存为一个对象的属性时候,称为一个方法。
       当一个方法被调用时候,this被绑定到该对象
 
var Obj = {
       value :0 ,
       increment : function(param){
                //对param进行非数字类型的默认值设置
                this.value += typeof param === 'number' ? param : 1;
       }
}

Obj.increment();    //没有传参 应该返回默认值1
console.log(Obj.value);  //1

Obj.increment(3);   //参数为3 数值型 进行+=操作
console.log(Obj.value);  //4

/*
使用了this去访问对象,能从对象中取值或修改对象
this可取得它们所属对象的上下文的方法称为公共方法
*/
 

 

   2. 函数调用模式

 

    当一个函数并非像上面一样作为一个对象的属性时候,它被当做一个函数来调用

 

 

function add(a,b){
    return a + b;
 }
var sum = add(5,6);  //sum 为11

/*
this被绑定到全局对象,这种方式的this也是一种被称为是一种错误的指向
严格上当内部函数被调用时候,此时的this应该仍然绑定到外部函数的this变量
当然很多api的做法多是定义一个变量并给它赋值this
var that = this;
*/

 

  3. 构造器调用模式

 

 

 

//创建一个名为Obj的构造器函数
var Obj = function(param){
      this.status = param;
}

//给Obj的所有实例提供一个getStatus的公共api
Obj.prototype.getStatus = function(){
      return this.status;
}

//构造一个Obj的实例
var obj = new Obj("over");
console.log(obj.getStatus());      //over

/*
结合new前缀调用的函数被称为构造器函数
它们存在以大写格式命名的变量里面
*/

 

 

 

  4. Apply|call调用模式

 

   这个还是比较常见的。使用原生支持的apply或者call(两个api区别可以参照我其他的文章)

 

function add(a,b){
    return a+b;
}
var arr = [2,3];

/*
apply(param1.param2)
@param1 ----被绑定的this对象
@param2 ----一个参数数组
*/
console.log(add.apply(null,arr));   //5

 

分享到:
评论

相关推荐

    浅谈C语言函数的递归调用.pdf

    浅谈C语言函数的递归调用.pdf

    浅谈C语言函数的递归调用 (1).pdf

    浅谈C语言函数的递归调用 (1)

    浅谈在linux kernel中打印函数调用的堆栈的方法

    下面小编就为大家带来一篇浅谈在linux kernel中打印函数调用的堆栈的方法。小编觉得挺不错的。现在就分享给大家。也给大家做个参考。一起跟随小编过来看看吧

    浅谈C语言函数调用参数压栈的相关问题

    以前在面试中被人问到这样的问题,函数调用的时候,参数入栈的顺序是从左向右,还是从右向左。参数的入栈顺序主要看调用方式,一般来说,__cdecl 和__stdcall 都是参数从右到左入栈。 看下面的代码: #include int...

    浅谈python函数调用返回两个或多个变量的方法

    今天小编就为大家分享一篇浅谈python函数调用返回两个或多个变量的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    浅谈函数调用的不同方式,以及this的指向

    1.作为函数,一种直接易懂的方式(即函数调用模式)。 2.作为方法,方法是连接在对象上的,被这个对象调用,这种形式就是面向对象编程。 3.作为构造器,在构造的过程中一个新的对象被创建出来。 4.经由函数的apply...

    浅谈ElementUI中switch回调函数change的参数问题

    今天小编就为大家分享一篇浅谈ElementUI中switch回调函数change的参数问题,具有很好的价值,希望对大家有所帮助。一起跟随小编过来看看吧

    浅谈Python中函数的定义及其调用方法

    所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用函数的使用包含两个步骤 1.定义函数–封装独立的功能 2.调用函数–享受封装的成果 函数的作用:在开发时,使用函数可以提高编写的效率...

    浅谈js中子页面父页面方法 变量相互调用

    (1)子页面调用父页面的方法或者变量: window.parent.方法()或者变量名 window.parent相当于定位到父页面 之后的操作和在父页面中写代码一样写 window.parent.aa();//调取aa函数 window.parent.bb;//调取bb变量 ...

    shell浅谈之十函数.docx

    Linux Shell编程中也会使用到函数,函数可以把大的命令集合分解成若干较小的任务,也避免重复编写相同...函数又涉及到很多基本使用:函数参数调用、函数返回值、局部变量及全局变量、函数间的相互调用和函数递归调用。

    浅谈js中调用函数时加不加括号的问题

    其实总结起来如下: ...这也是由于括号的二义性,因为括号是“函数调用运算符”,相当于在执行这样一个函数,所以产生的问题在理解了之后也就理解了。 另外:除了两边不加括号,也可以两边都加括号来实现函数的拷

    C语言中函数声明与调用问题

    假如函数在调用它之前定义... 您可能感兴趣的文章:深入理解C++中public、protected及private用法C/C++函数调用的几种方式总结浅析C语言中堆和栈的区别关于C语言中参数的传值问题浅谈C语言函数调用参数压栈的相关问题

    浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序

    下面小编就为大家带来一篇浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    应用笔记LAT1241+浅谈STM32库里的回调函数

    有人对 STM32 固件库里的回调函数有些好奇甚至纠结,这里...一般来讲,所谓回调函数,泛指基于事件触发而被调用执行的函数,简单点说,就是条件满足了就调用的函数,往往会跟函数指针结合起来通过函数指针实现调用。

    【Unity教程】浅谈Unity调用其他脚本函数的方法(未完)-附件资源

    【Unity教程】浅谈Unity调用其他脚本函数的方法(未完)-附件资源

Global site tag (gtag.js) - Google Analytics