`
zhangyaochun
  • 浏览: 2626126 次
  • 性别: 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语言函数的递归调用 (1).pdf

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

    浅谈C语言函数.pdf

    5. 函数调用的过程:函数调用涉及几个关键步骤,包括实参的求值、参数的传递、执行函数体以及返回值(如果函数有返回值的话)。求值顺序,即实参的求值顺序,取决于编译器的实现,因此可能从左到右,也可能从右到左...

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

    在Linux内核开发和调试过程中,理解函数调用堆栈是非常关键的,它能帮助开发者追踪问题的根源,尤其是在处理内核崩溃或者异常时。本文将深入探讨如何在Linux内核中打印函数调用的堆栈。 首先,Linux内核提供了一个...

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

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

    浅谈C语言中函数入门的讲解.pdf

    它是一种形式的接口文档,帮助编译器检查函数调用时的参数类型是否匹配。 然后是函数的调用,这是函数功能实现的开始。函数调用涉及指定函数名,并通过括号提供参数。这些参数将被传递到函数体中,函数根据这些参数...

    shell浅谈之十函数.docx

    2. 函数调用:通过函数名来调用函数,例如`funcname`。调用时,Shell会执行函数体内的命令,然后返回到调用处继续执行。 3. 函数参数:函数可以接受参数,这些参数以位置参数的方式传递。参数通过$1, $2, $3等来...

    浅谈Python 函数式编程

    lambda 本质上是一个函数对象,可以将其赋值给另一个变量,再由该变量来调用函数,也可以直接使用。 #平时,我们是先定义函数,再进行调用 def power(x): return x ** 2 print(power(2)) #使用lambda表达式的时候...

    浅谈基于SAP系统的远程功能调用.docx

    SAP 系统中远程功能调用的基本知识和相关概念浅谈 SAPR/3 是德国 SAP 公司研发的基于客户/服务器环境的系统软件,可以处理一个公司中几乎所有的经营管理任务,具有功能模块化、信息高度共享、开放性、用户界面友好...

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

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

    浅谈职高C语言函数的教学.pdf

    浅谈职高C语言函数的教学 函数是C语言程序设计的重点和难点。笔者mainly介绍在教学中如何使学生学习轻松、扎实、灵活地编写C语言函数,培养学生严谨的编程作风和相互合作的团队意识。 首先,函数是C语言程序设计的...

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

    调用这个函数时,可以使用解包(unpacking)的方式来接收返回的值: ```python result_sum1, result_sum2 = calculate_sums(3, 4) print(result_sum1) # 输出:7 print(result_sum2) # 输出:12 ``` 这里的解包...

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

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

    浅谈jQuery效果函数

    这个例子中,`setInterval()`函数定时调用`go()`函数,`go()`函数则将字符串的第一个字符移到末尾,从而实现文本的滚动效果。 总的来说,jQuery的效果函数极大地简化了网页动态效果的开发,通过它们,开发者可以...

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

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

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

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

Global site tag (gtag.js) - Google Analytics