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) ...
随机推荐
- ucos信号量集源码分析
在实际的应用之中,一个任务经常需要等待多个信号量的同时生效,或者说任务需要根据多个信号量的组合作用的结果来决定任务的运行方式,为了实现这种多信号量组合的功能,ucos实现了信号量集的特殊结构. 信号量 ...
- Memcached源码分析之items.c
#include "memcached.h" #include <sys/stat.h> #include <sys/socket.h> #include ...
- SVN:cannot map the project with svn provider解决办法
转自:http://www.blogjava.net/jzone/articles/337697.html 首先,叙述一下令人蛋疼的情况,纠结了我几个小时,更新Workspace原有的项目,显示更新成 ...
- MVC 视图-模型,动态更新
<!DOCTYPE html> <html> <head> <title>Binding</title> <script src=&q ...
- PHP使用GD2库画图,图像无法输出解决方法
在CS6编辑环境下,使用php的GD2库绘制图像,在浏览器上输出可能会出现图像无法输出的情况,目前发现两个解决方法:方法1:用记事本写,再另存为utf-8 no bom的格式. 方法2:在代码中添加o ...
- 封装bt轮播图淡入淡出效果样式
<!--BT轮播图--> <div data-ride="carousel" class="carousel slide carousel_inn ...
- 2.7. 属性的各种设置选项(Core Data 应用程序实践指南)
可供配置的选项根据属性类型的不同有所变化,并不是每一种属性都能配置下列选项 Transient:勾选该选项,表示该属性不写入“持久化存储区”,这听起来很奇怪,但有时候,只需要把特性留在托管对象上下文就 ...
- KERNEL32相关函数
CALL DWord Ptr [<&KERNEL32.WriteFile>] kernel32.WriteFile 将数据写入一个文件,也可将这个函数应用于对通信设备.管道.套接字 ...
- Chrome 控制台 如何调试javascript
上面的文章已经大致介绍了一下console对象具体有哪些方面以及基本的应用,下面简单介绍一下如何利用好chrome控制台这个神器好好调试javascript代码(这个才是我们真正能用到实处的地方) 1 ...
- 通过RMAN克隆11g数据库(基于active database)
11g的RMAN duplicate 可以通过Active databaseduplicate和Backup-based duplicate两种方法实现.这里的测试使用的是Active databas ...