前言:
最近在写代码的时候,有很多函数调用方面的思考,简单整理,个人学习
核心思想来自以前看烂了的好书《JavaScript语言精髓》
正文:
调用一个函数将暂停当前函数的执行,传递控制权和参数给新函数。除了声明时定义的形式参数,每一个函数接收两个附加的参数: this和arguments。
关于this在下面四种函数调用方式中会主要介绍一下。
- 方法调用模式
- 函数调用模式
- 构造器调用模式
- apply和call调用模式(原书上没有加call,个人觉得加上比较好)
- 方法调用模式
当一个函数被保存为一个对象的属性时候,称为一个方法。
当一个方法被调用时候,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)
下面小编就为大家带来一篇浅谈在linux kernel中打印函数调用的堆栈的方法。小编觉得挺不错的。现在就分享给大家。也给大家做个参考。一起跟随小编过来看看吧
以前在面试中被人问到这样的问题,函数调用的时候,参数入栈的顺序是从左向右,还是从右向左。参数的入栈顺序主要看调用方式,一般来说,__cdecl 和__stdcall 都是参数从右到左入栈。 看下面的代码: #include int...
今天小编就为大家分享一篇浅谈python函数调用返回两个或多个变量的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
1.作为函数,一种直接易懂的方式(即函数调用模式)。 2.作为方法,方法是连接在对象上的,被这个对象调用,这种形式就是面向对象编程。 3.作为构造器,在构造的过程中一个新的对象被创建出来。 4.经由函数的apply...
今天小编就为大家分享一篇浅谈ElementUI中switch回调函数change的参数问题,具有很好的价值,希望对大家有所帮助。一起跟随小编过来看看吧
所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用函数的使用包含两个步骤 1.定义函数–封装独立的功能 2.调用函数–享受封装的成果 函数的作用:在开发时,使用函数可以提高编写的效率...
(1)子页面调用父页面的方法或者变量: window.parent.方法()或者变量名 window.parent相当于定位到父页面 之后的操作和在父页面中写代码一样写 window.parent.aa();//调取aa函数 window.parent.bb;//调取bb变量 ...
Linux Shell编程中也会使用到函数,函数可以把大的命令集合分解成若干较小的任务,也避免重复编写相同...函数又涉及到很多基本使用:函数参数调用、函数返回值、局部变量及全局变量、函数间的相互调用和函数递归调用。
其实总结起来如下: ...这也是由于括号的二义性,因为括号是“函数调用运算符”,相当于在执行这样一个函数,所以产生的问题在理解了之后也就理解了。 另外:除了两边不加括号,也可以两边都加括号来实现函数的拷
假如函数在调用它之前定义... 您可能感兴趣的文章:深入理解C++中public、protected及private用法C/C++函数调用的几种方式总结浅析C语言中堆和栈的区别关于C语言中参数的传值问题浅谈C语言函数调用参数压栈的相关问题
下面小编就为大家带来一篇浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
有人对 STM32 固件库里的回调函数有些好奇甚至纠结,这里...一般来讲,所谓回调函数,泛指基于事件触发而被调用执行的函数,简单点说,就是条件满足了就调用的函数,往往会跟函数指针结合起来通过函数指针实现调用。
【Unity教程】浅谈Unity调用其他脚本函数的方法(未完)-附件资源