JS中函数参数和函数返回值的理解
函数本质就是功能的集合
JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能)
var fn=function(a){return a+100;}
fn=function(a){return a+200;}
alert(fn(100)); //300
要访问函数的引用(指针)而不是执行函数时,必须去掉圆括号,加上圆括号表示访问函数执行后的结果
函数体内部的语句在执行时,一旦遇到return,函数就会结束(后面的代码不会执行),并返回返回值
返回值可以是任何类型的值,如果没有return或只有return而没有返回值,则函数返回默认值undefined
在函数内部,有两个特殊的对象arguments和this
a.arguments是一个类似数组(但不是数组)的对象,用于保存函数的参数,即使函数定义时没有定义参数,arguments也会保存实际调用时使用的参数
b.this表示当前函数执行的环境对象的引用
function fn(){return this;}
fn();
函数拥有两个属性length和prototype
a.length表示希望接收的参数个数,而不是实际接收的
b.prototype保存了引用类型的所有实例方法(tostring(),valueOf()等等),在ES5中,prototype属性是无法枚举的
函数拥有两个非继承而来的方法apply()和call(),这两个方法的作用都是在特定的作用域中调用函数实际上等于设置函数体内this对象的值
a.apply()方法可以接收两个参数,一个是在其中运行函数的作用域,另一个是参数数组(可以没有),参数数组可以是Array的实例,也可以是arguments对象
b.call()方法和apply()方法作用相同,但接收参数的方式不同,call()第二个参数只能是函数参数的数组形式,也就是说第二个参数必须一个一个列出来
这两个方法常用来扩充作用域
c.fn()==fn.call()==fn.apply()
function fn1(a,b){return a+b;}
function fn2(a,b){return fn1.apply(this,arguments);}
alert(fn1(1,1)); //2
alert(fn2(1,1)); //2
function fn1(a,b){return a+b;}
function fn2(a,b){return fn1.apply(this,[a,b]);}
alert(fn1(1,1)); //2
alert(fn2(1,1)); //2
fn.call(window); //fn在全局环境中执行
fn.call(this); //fn在当前环境中执行
ES5中还定义了一个方法bind(),这个方法会创造一个函数的实例,其this值会被绑定到传给bind()方法的值
window.color='red';
var p={color:'blue'};
function fn(){alert(this.color);}
var fn0=fn.bind(p);
fn0(); //blue
JS中函数参数和函数返回值的理解的更多相关文章
- Spring-boot 配置Aop获取controller里的request中的参数以及其返回值
首先在你的Maven的pom文件里加入aop的依赖: <dependency> <groupId>org.springframework.boot</groupId> ...
- day11 python学习 函数的建立,返回值,参数
函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算,如:发送邮件.计算出 [11,22,38,888,2]中的最大数等 ...
- main.js中封装全局登录函数
1. 在 main.js 中封装全局登录函数 通过 vue 对象的原型扩展,可以扩展一个函数,这样这个函数就可以在每一个界面通过类似指向对象的方式,去访问这个函数. 如下是 main.js 扩展的函数 ...
- JS中的高阶函数
JS中的高阶函数 高阶函数是指以函数作为参数的函数,并且可以将函数作为结果返回的函数. 1. 高阶函数 接受一个或多个函数作为输入 输出一个函数 至少满足以上一个条件的函数 在js的内置对象中同样存在 ...
- JS中的自执行函数
本来规划的是2013年,狠狠的将JS学习下,谁知计划赶不上变化,计划泡汤了.13年的我对JS来说可以说是属于跟风,对它的理解和认识也仅仅是皮毛而已,也是因为要完成<ArcGIS API for ...
- C语言中可变参数的函数(三个点,“...”)
C语言中可变参数的函数(三个点,“...”) 本文主要介绍va_start和va_end的使用及原理. 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end ...
- 总结day7 ---- 函数的内容 ,初识,返回值,进阶(一)
内容大纲: 一: 函数识别 二: 函数的结构 三: 函数的返回值, 四: 函数的参数 五: 动态参数 六: 形参的顺序 七: 名称空间 八: 作用域 九: 加载顺序和取值顺序 十: 内置函数 十一: ...
- 初识python 函数(定义,传参,返回值)
python基础(二): 菜鸟教程基础知识讲解的非常全面,内容选择我认为的重点输出一遍 函数: 定义一个函数: 你可以定义一个由自己想要功能的函数,以下是简单的规则: def fun(arg): pa ...
- go语言基础之函数有多个返回值
1.函数有多个返回值 示例1: package main //必须有一个main包 import "fmt" //go推荐用法 func myfunc01() (int, int, ...
- js中的三种函数写法
js中的三种函数写法 <script type="text/javascript"> //普通的声明方式 function myFun(m,n){ alert(m+n) ...
随机推荐
- 开源免费的C/C++网络库(c/c++ sockets library)补充
(1)ACE 庞大.复杂,适合大型项目.开源.免费,不依赖第三方库,支持跨平台. http://www.cs.wustl.edu/~schmidt/ACE.html (2)Asio Asio基于Boo ...
- STM32 驱动1602液晶
利用STM32f103c8t6单片机驱动1602A液晶进行显示功能 上图即为写入信息后的效果图 本人用的是STM32的核心系统,无任何外设 库函数:3.5版本的库函数 驱动模式:采用4线驱动模式 供电 ...
- Heka GeoIpDecoder 配置
Prepare: 安装geoip-api-c,确保/usr/include/GeoIP.h存在: 源码编译安装Heka (容易出现问题): 下载GeoLiteCity.dat数据库. 配置文件举例: ...
- jmeter+ant+jenkins+mac 构建后自动发送邮件
1.安装Email Extension Plugin插件 2.进入系统管理-系统设置,按如下进行设置: ------------------------------------------------ ...
- 绕过网站安全狗拦截,上传Webshell技巧总结(附免杀PHP一句话)
这篇文章我介绍一下我所知道的绕过网站安全狗上传WebShell的方法. 思路是:修改HTTP请求,构成畸形HTTP请求,然后绕过网站安全狗的检测. 废话不多说,切入正题.... 1.实验环境: Win ...
- centos5.5 mount new harddisk
Linux 系统挂载数据盘 1.查看数据盘 使用"fdisk-l"命令查看 2. 对数据盘进行分区 执行"fdisk /dev/sdb"命令,对数据盘进行分区 ...
- cpsr当前程序状态寄存器
详解CPSR寄存器(ls_core) (2012-10-11 17:29:47) 转载▼ 标签: arm920t寄存器 cpsr cpu工作原理 分类: 第四章-踏入嵌入式领域之ARM 在介绍CPSR ...
- spark中数据的读取与保存
1.文本文件 (1)读取文本文件 JavaRDD<String> input =sc.textFile(dir) (2)保存文本文件 result.saveAsTextFile(dir)) ...
- Java经典案例之-“最大公约数和最小公倍数”
/** * 描述:输入两个正整数m和n,求其最大公约数和最小公倍数.(最大公约数:最大公约数, * 也称最大公因数.最大公因子,指两个或多个整数共有约数中最大的一个.) * (最小公倍数:几个数共有的 ...
- Java经典案例之-判断兔子的数量(斐波那契数列)
/** * 描述:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子, * 假如兔子都不死,问每个兔子总数为多少? * 分析:根据题目条件可以推断 * 兔子的规律 ...