- 包括内容
- 函数表达式
- 外文名
- function reference
- 嵌套调用
- C语言中不允许作嵌套的函数定义
- 一般形式
- 在程序中通过对函数的调用来
- 中文名
- 函数调用
-
js中的4种函数调用模式:函数调用、方法调用、构造器调用、间接调用
2017-09-17 11:19:28js系列教程4-函数、函数参数教程全解js中的4种函数调用模式javascript一共有4种调用模式:函数调用模式、方法调用模式、构造器调用模式和间接调用模式。【1】函数调用模式 当一个函数并非一个对象的属性时,那么它...全栈工程师开发手册 (作者:栾鹏)
js中的4种函数调用模式
javascript一共有4种调用模式:函数调用模式、方法调用模式、构造器调用模式和间接调用模式。
【1】函数调用模式
当一个函数并非一个对象的属性时,那么它就是被当做一个函数来调用的。对于普通的函数调用来说,函数的返回值就是调用表达式的值
function add(x,y){ return x+y; } var sum = add(3,4); console.log(sum)//7
使用函数调用模式调用函数时,非严格模式下,this被绑定到全局对象;在严格模式下,this是undefined
function add(x,y){ console.log(this);//window } add();
function add(x,y){ 'use strict'; console.log(this);//undefined } add();//window
因此,'this’可以用来判断当前是否是严格模式
var strict = (function(){return !this;}());
重写
因为函数调用模式的函数中的this绑定到全局对象,所以会发生全局属性被重写的现象
var a = 0; function fn(){ this.a = 1; } fn(); console.log(this,this.a,a);//window 1 1
【2】方法调用模式
当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象。如果调用表达式包含一个提取属性的动作,那么它就是被当做一个方法来调用
var o = { m: function(){ console.log(1); } }; o.m();//1
方法可以使用this访问自己所属的对象,所以它能从对象中取值或对对象进行修改。this到对象的绑定发生在调用的时候。通过this可取得它们所属对象的上下文的方法称为公共方法。
var o = { a: 1, m: function(){ return this; }, n: function(){ this.a = 2; } }; console.log(o.m().a);//1 o.n(); console.log(o.m().a);//2
任何函数只要作为方法调用实际上都会传入一个隐式的实参——这个实参是一个对象,方法调用的母体就是这个对象,通常来讲,基于那个对象的方法可以执行多种操作,方法调用的语法已经很清晰地表明了函数将基于一个对象进行操作
rect.setSize(width,height); setRectSize(rect,width,height);
假设上面两行代码的功能完全一样,它们都作用于一个假定的对象rect。可以看出,第一行的方法调用语法非常清晰地表明这个函数执行的载体是rect对象,函数中的所有操作都将基于这个对象
和变量不同,关键字this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this。如果嵌套函数作为方法调用,其this的值指向调用它的对象。如果嵌套函数作为函数调用,其this值不是全局对象(非严格模式下)就是undefined(严格模式下)
var o = { m: function(){ function n(){ return this; } return n(); } } console.log(o.m());//window
var o = { m: function(){ function n(){ 'use strict'; return this; } return n(); } } console.log(o.m());//undefined
如果想访问这个外部函数的this值,需要将this的值保存在一个变量里,这个变量和内部函数都同在一个作用域内。通常使用变量self或that来保存this
var o = { m: function(){ var self = this; console.log(this === o);//true function n(){ console.log(this === o);//false console.log(self === o);//true return self; } return n(); } } console.log(o.m() === o);//true
【3】构造函数调用模式
如果函数或者方法调用之前带有关键字new,它就构成构造函数调用
function fn(){ this.a = 1; }; var obj = new fn(); console.log(obj.a);//1
如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内
function fn(x){ this.a = x; }; var obj = new fn(2); console.log(obj.a);//2
如果构造函数没有形参,javascript构造函数调用的语法是允许省略实参列表和圆括号的。凡是没有形参的构造函数调用都可以省略圆括号
var o = new Object(); //等价于 var o = new Object;
[注意]尽管构造函数看起来像一个方法调用,它依然会使用这个新对象作为调用上下文。也就是说,在表达式new o.m()中,调用上下文并不是o
var o = { m: function(){ return this; } } var obj = new o.m(); console.log(obj,obj === o);//{} false console.log(obj.constructor === o.m);//true
构造函数通常不使用return关键字,它们通常初始化新对象,当构造函数的函数体执行完毕时,它会显式返回。在这种情况下,构造函数调用表达式的计算结果就是这个新对象的值
function fn(){ this.a = 2; } var test = new fn(); console.log(test);//{a:2}
如果构造函数使用return语句但没有指定返回值,或者返回一个原始值,那么这时将忽略返回值,同时使用这个新对象作为调用结果
function fn(){ this.a = 2; return; } var test = new fn(); console.log(test);//{a:2}
如果构造函数显式地使用return语句返回一个对象,那么调用表达式的值就是这个对象
var obj = {a:1}; function fn(){ this.a = 2; return obj; } var test = new fn(); console.log(test);//{a:1}
【4】间接调用模式
javascript中函数也是对象,函数对象也可以包含方法。call()和apply()方法可以用来间接地调用函数
这两个方法都允许显式指定调用所需的this值,也就是说,任何函数可以作为任何对象的方法来调用,哪怕这个函数不是那个对象的方法。两个方法都可以指定调用的实参。call()方法使用它自有的实参列表作为函数的实参,apply()方法则要求以数组的形式传入参数
var obj = {}; function sum(x,y){ return x+y; } console.log(sum.call(obj,1,2));//3 console.log(sum.apply(obj,[1,2]));//3
-
VUE中函数调用函数
2020-04-17 16:55:08VUE中函数调用函数VUE中函数调用函数 VUE中函数调用函数 有时候,需要在一个函数中,调用另外一个函数,采用这种方法 this.$options.methods.onQuery(‘queryForm’); ...展开全文 -
查看matlab某函数调用了哪些函数或被哪些函数调用
2018-10-06 15:42:181、查看matlab某函数调用了哪些函数 https://blog.csdn.net/smallcaptain2009/article/details/81195569 https://blog.csdn.net/lusongno1/article/details/54667066 2、查看matlab某函数被哪些函数调用...1、查看matlab某函数调用了哪些函数
https://blog.csdn.net/smallcaptain2009/article/details/81195569
https://blog.csdn.net/lusongno1/article/details/54667066
2、查看matlab某函数被哪些函数调用
-
Python函数必须先定义、后调用(函数调用函数例外)
2018-10-12 19:56:54java开发者在定义类中的方法时,不会关心方法的定义相对于调用语句的位置。 但是python中需要注意:函数必须先定义、后调用...4、但是语句对函数调用,必须在函数调用之后,包括直接调用的函数调用的其他函数也必...java开发者在定义类中的方法时,不会关心方法的定义相对于调用语句的位置。
但是python中需要注意:
函数必须先定义、后调用(函数调用函数例外)。如下为示例说明:
1、python函数的应用一般需要:先定义、后调用:
2、如果函数定义在调用之后,执行将报错:
3、函数中调用函数不受此限制:
4、但是语句对函数调用,必须在函数调用之后,包括直接调用的函数调用的其他函数也必须在调用语句之前,否则报错:
参考:https://blog.csdn.net/u011361880/article/details/74570713
-
C语言函数调用
2019-04-30 14:50:25C函数调用 调用格式: 函数名(实参表) 并且应该避免写出与实际参数计算次序有关的调用。 函数调用可以出现在以下两种情况中: 无返回值的函数通常作为表达式语句,即直接在函数调用的后面加一个分号; 有返回值的... -
Python入门之函数调用——第3关:函数与函数调用 - 分清主次
2018-12-19 14:42:39我们一般将字符串、列表等变量作为参数进行函数调用。但函数本身也是一个对象,所以我们也可以将函数作为参数传入另外一个函数中并进行调用。 本关的目标是让读者了解并掌握函数作为参数传入另外一个函数中并进行... -
自定义函数及函数调用
2019-05-10 12:17:101、自定义函数声明、函数调用、函数实现概念混淆 2、形参和实参混淆; 3、自定义函数参数的传值方式混淆;传来传去都不知道传的到底是什么? 接下来,我就重点围绕道友们常见的问题,说一说: 1、自定义函数声明... -
C语言函数调用栈(一)
2018-07-19 22:16:25程序的执行过程可看作连续的函数调用。当一个函数执行完毕时,程序要回到调用指令的下一条指令(紧接call指令)处继续执行。函数调用过程通常使用堆栈实现,每个用户态进程对应一个调用栈结构(call stack)。编译器使用... -
PHP 函数调用
2019-09-24 13:20:53函数调用 函数调用时,实参要按照顺序给形参。 函数调用时,互相独立,默认没有联系。 执行完毕后,返回调用的位置,继续向下执行。 案例 <?php function A(){ echo "This is A fun!<hr />"; } function B... -
子函数调用
2019-01-04 22:32:41子函数调用 子函数 定义:能被其他程序调用,在实现某种功能后能自动返回到调用程序去的程序。其最后一条指令一定是返回指令,故能保证重新返回到调用它的程序中去。也可调用其他子程序,甚至可自身调用(如递归... -
Java函数调用
2019-09-26 19:44:23函数调用 举例说明Java中函数的调用 public class test { public static void main(String[] args) { int i = 0; func(i); i = i++; System.out.println(i); String str = "hello wo... -
函数调用(递归函数调用)底层机制
2013-07-01 16:32:47函数调用的底层实现 通常,当在一个函数的运行期间调用另一个函数时,在运行被调用函数之前,系统需要先完成3件事: (1)将所有的实在参数,返回地址等信息传递给被调用函数保存 (2)为被调用函数的局部... -
3.C++函数调用过程
2020-03-08 17:31:05函数调用堆栈的过程 1.函数中普通变量的内存分配问题 当一个函数进行调用时,函数的形参、以及函数的局部变量都会在栈中被分配内存,而栈又分两种; 栈低不变,栈顶不断动态变化; 栈顶不变,栈低在动态变化; #... -
函数调用过程
2018-01-31 09:21:19今天突然看到有人私信我说一直没写函数调用过程(栈帧的形成和销毁过程)这篇博文,赶紧补上。 刚看的栈帧内容时,我很迷惑,我觉得栈帧创建和销毁很麻烦,几句话根本说不完,而且我好像描述不清楚他的过程,所以... -
python函数的定义必须在调用前面(函数调用函数例外)
2017-07-06 17:07:45#标准的先函数定义,后函数调用 def add1(a,b): return a+b print add1(1,2) #函数2可以调用后面定义的函数3 #事实上,我们在调用函数2的时候,一样是遵循先定义后调用的准则 def add2(a,b): return add3... -
python中的函数必须在调用之前(函数调用函数例外)定义
2019-04-03 14:58:27标准的先函数定义,后函数调用 def add1(a,b): return a+b print add1(1,2) 函数2可以调用后面定义的函数3 #事实上,我们在调用函数2的时候,一样是遵循先定义后调用的准则 def add2(a,b): return add3(a,b) ... -
系统调用和函数调用的区别
2018-06-06 22:51:57系统调用与函数调用的区别 系统调用 使用INT和IRET指令,内核和应用程序使用的是不同的堆栈,因此存在堆栈的切换,从用户态切换到内核态,从而可以使用特权指令操控设备, 函数调用 使用CALL和RET... -
函数调用格式
2019-07-22 10:05:07函数调用格式: 代码: //eg1: #include<stdio.h> void ppp(); //声明 int main() { ppp(); //有分号 return 0; } void ppp() { printf("aaa"); } //eg:2. #include <stdio.h> void ppp() //定义... -
内存堆栈,函数调用
2018-04-17 10:43:03栈结构是为了 函数调用,所以有了,函数调用栈call stack, 编译器处理,释放内存,大小有默认值,固定值,非常有限 使用栈是因为栈的lifo符合函数调用顺序特性,方便处理 为什么函数调用要用栈实现 函数调用约定... -
C语言函数调用三种方式:传值调用,引用调用和传地址调用
2017-03-18 16:47:36C语言函数调用三种方式:传值调用,引用调用和传地址调用 -
类的函数调用
2018-06-04 10:42:04父类和子类的函数调用1.用指针(引用)调用函数的时候,被调用的函数取决于指针(引用)的类型;2.涉及多态性时,采用虚函数和动态绑定,函数调用在运行时绑定,而非在编译时绑定,此时不再单独根据指针(引用)类型... -
C++函数调用过程和内置函数详解
2018-03-12 10:15:01上图表示函数调用过程:①程序先执行函数调用之前的语句;②流程的控制转移到被调用函数入口处,同时进行参数传递;③执行被调用函数中函数体的语句;④流程返回调用函数的下一条指令处,将函数返回值带回;⑤接着... -
系统调用和函数调用区别
2017-10-20 10:53:15系统调用和函数调用 1. 系统调用 a. 什么是系统调用 系统调用,通俗的讲,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以... -
Matlab创建文件、function文件和函数调用
2019-07-08 15:38:08二、函数调用 二、函数句柄 三、匿名函数 想查找相关内容也可在页面按ctrl+F搜索文字 一、建立文件 新建脚本,保存后可运行,后缀为.m 二、函数调用 创建ffib.m文件,编写求Fibonacci数列的函数 ... -
C语言中的函数调用和函数返回值
2016-10-31 23:19:11函数调用也就是主调函数使用被调函数,函数调用的一般形式为:函数名({实际参数表}) 对无参函数调用时则无实际参数表。 实际参数表中的参数可以是常数,变量或其他构造类型数据及表达式。 各实参之间用逗号分隔... -
函数调用约定
2012-11-26 21:31:00函数调用约定就是描述参数如何传递,堆栈由调用方还是被调用方平衡,返回值如何返回等规则。 函数调用约定的几种类型有:__stdcall, __cdecl, __fastcall, __thiscall, __nakedcall, __pascal 下面介绍几种常见的... -
数组、函数调用
2018-07-24 23:16:50函数调用: 题目:通过编程实现,统计1~n有多少个9 (n通过参数传入) #include<stdio.h> void fun(int n);// main函数一般置于调用函数下方; int main() { int n; printf("Please ... -
perf查看函数调用
2017-09-02 10:51:10前一段使用perf查看程序的热点以及函数调用,一直看不到热点函数的函数调用,很是奇怪,在网上问别人,别人都说没问题,一度很是迷惑。后来又试了一下,结果就出现了,很是神奇。 使用方法很简单,就是perf ...