JavaScript的函数(一)
,1,在javascript中,函数即对象。函数里面的参数可以是个函数,例如:
data.sort(function(a,b){return a-b;})
函数的返回值,return语句导致函数停止执行,并返回它的表达式(如果有的话)的值给调用者。如果没有返回值的函数,就是没有return,就是返回 undefined值给调用者。没有返回值的函数有时候称为过程。
2,嵌套函数:
有趣之处在于他的变量作用域规则。就是函数里面可以嵌套一个函数。
3,函数调用:
作为函数;
作为方法(无非是保存在一个对象属性里面的javascript函数);
作为构造函数;
通过它们的call()和apply()方法间接调用。
方法和this关键字是面向对象编程范例的核心。任何函数只要作为方法调用,实际上都会传入一个隐式的实参---这个实参是一个对象。方法调用的母体就是这个对象。
var o = {
m:function(){
var self = this;
console.log(this === o);
f();
function f(){
console.log(this);
console.log(self === o);
}
}
}
执行 o.m()
结果:
true
false
true
这里说明一点:嵌套函数里面的this指向问题:this的值是全局对象或者undefined,如果要用外层函数的上下文环境,则需要将this的值保存在一个变量self里面。
4,方法链:
当方法的返回值是一个对象,这个对象还可以再调用它的方法,形成链式的调用方式。
当方法并不需要返回值时,最好直接返回this。如果 在设计的API中一直采用这种方式(每个方法都返回this)。使用API就可以进行“链式调用”,不要将方法的链式调用和构造函数的链式调用混为一谈。
5,构造函数的调用:
首先:如果构造函数没有形参,可以省略圆括号,
var o = new Object();
var o = new Object;
这个两种写法是等价的。其次:new o.m();调用上下文不是o,而是这个新对象作为调用上下文。
最后:函数的返回值,构造函数通常不使用return关键字。
6,可变长的实参列表:实参对象
当:实参列表 > 形参个数,没有办法获得未命名值的引用。参数对象解决了这个问题。在函数体内,arguments是指向实参对象的引用。实参对象是一个类数组对象。可以通过下标来访问实参值。不用非得通过名字来得到实参。
实参对象有一个重要的用处:就是让函数可以操作任意数量的实参。例如:
function max(){
var max = Number.NEGATIVE_INFINITY;
for(var i = 0;i<arguments.length;i++){
if(arguments[i] > max){
max = arguments[i];
}
}
return max;
}
var largest = max(1,10,100,2,3,1000,4,5,1003);//1003
类似这种函数可以接收任意个数的实参。也称为:“不定实参函数”。
remember:arguments并不是真正的数组,而是一个实参对象。可以这样理解:它是一个对象,只是碰巧拥有以数字为索引的属性。
实参对象还定义了callee和caller属性。arguments.callee()属性指向当前正在执行的函数。caller是非标准的,单大多数浏览器都实现了这个属性。实用场景:匿名函数中通过callee来递归调用自身。
var factorial = function(x){
if(x <= 1) return 1;
return x*arguments.callee(x-1);
}
factorial(10) //这里就是一个10*9*8*7*6*5*4*3*2*1的方法,用的是递归 匿名函数的实现方式:
(function(x){
if(x <= 1) return 1;
return x*arguments.callee(x-1);
}(10)) //同样也是可以实现该递归的方法
7.将对象属性用作实参:
当一个函数包含超过三个形参时,最好通过名/值对的形式来传入参数。这样参数的位置就无关紧要。而且这种写法允许在函数中设置省略参数的默认值。
JavaScript的函数(一)的更多相关文章
- JavaScript中函数函数的定义与变量的声明<基础知识一>
1.JavaScript中函数的三种构造方式 a.function createFun(){ } b.var createFun=function (){ } c.var createFun=new ...
- 理解 JavaScript 回调函数并使用
JavaScript中,函数是一等(first-class)对象:也就是说,函数是 Object 类型并且可以像其他一等对象(String,Array,Number等)一样使用.它们可以"保 ...
- 5种 JavaScript 调用函数的方法
一次又一次的,我发现,那些有bug的Javascript代码是由于没有真正理解Javascript函数是如何工作而导致的(顺便说一下,许多那样的代码是我写的).JavaScript拥有函数式编程的特性 ...
- javascript escape()函数和unescape()函数
javascript escape()函数和unescape()函数 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串. 语法: escape(string) stri ...
- JavaScript调用函数的方法
摘要:这篇文章详细的介绍了Javascript中各种函数调用的方法及其原理,对于理解JavaScript的函数有很大的帮助! 一次又一次的,我发现,那些有bug的Javascript代码是由于没有真正 ...
- Javascript常用方法函数收集(二)
Javascript常用方法函数收集(二) 31.判断是否Touch屏幕 function isTouchScreen(){ return (('ontouchstart' in window) || ...
- javascript工具函数
第一部分 JavaScript工具函数 转义特殊字符为html实体 HtmlEncode: function(str){ return str.replace(/&/g, '&') ...
- [转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")
javascript eval函数解析json数据时为什么 加上圆括号?为什么要 eval这里要添加 “("("+data+")");//”呢? 原因在于: ...
- javascript篇-----函数作用域,函数作用域链和声明提前
在一些类似C语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的(也就是我们不能在代码段外直接访问代码段内声明的变量),我们称之为块级作用域,然而,不同于 ...
- JavaScript 常用函数总结
javascript函数: ·常规函数 ·数组函数 ·日期函数 ·数学函数 ·字符串函数 .cookie函数 1.常规函数 javascript常规函数包括以下9个函数: (1)alert ...
随机推荐
- dubbo接口泛化调用例子
@ApiOperation(value = "dubbo泛化调用工具接口") public Result dubboApiTool( @ApiParam(value = " ...
- 项目中docker swarm实践
docker swarm 集群服务通信 前置要求 服务需要在同一个docker swarm集群中 服务需要处于同一个overlay网络上 服务需要暴露容器端口 有2个以上服务名不同的服务 服务部署流程 ...
- 关于MyBatis的运行原理(转载)
1.获取sqlSessionFactory对象: 解析文件的每一个信息保存在Configuration中,返回包含Configuration的DefaultSqlSessionFactory: 注意: ...
- HTML颜色表
1.配色原则 2.HTML颜色表 颜色名列表 单击一个颜色名或者16进制值,就可以查看与不同文字颜色搭配的背景颜色 3.总参考表:
- ESTScan|EORF|Augustus|nr|PSM|
生物信息学方法的目的有二:1.常规找鉴定已知蛋白2.鉴定新蛋白 控制数据库大小可以通过增多酶切使得大数据库灵敏性增高数据量变小: 分步搜索是对于经典方法使用后找不到的新蛋白进行补充挖掘,预测蛋白与高可 ...
- OpenCV 腐蚀与膨胀(Eroding and Dilating)
#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #i ...
- Cenos配置Android集成化环境, 最终Centos libc库版本过低放弃
To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon ...
- 为啥Waymo和Uber间的官司,这么难界定?
自动驾驶作为被众多巨头和创业者看好的技术及领域,已有众多企业涉足其中.在自动驾驶尚未完全落地.制定统一标准前,每家企业都在争分夺秒地进行研发,试图率先抢占自动驾驶的高地.毕竟一旦成功,就能够创造巨大的 ...
- Java 去掉字符串中的重复数据
有一组字符串比如 北京,北京,上海,上海,上海,武汉-------->要得到 北京,上海,武汉 怎么去掉里面重复的字符串? function DelRepetStr(String ...
- connect() failed (111: Connection refused) while connecting to upstream报错处理
新lnmp环境调试项目时,nginx报错如下: 解决: 发现php-fpm.conf是以套接字方式通信,而nginx是以端口方式通信,见下图: 将nginx.conf修改为如下,重新reload即可