函数也是对象,拥有属性和方法,就类似普通对象那样。
1,length属性

arguments.lenght 表示传入实参的个数。

函数的length属性时只读属性,代表形参的个数。可以用arguments.callee.length表示:

function check(args){
var actual = args.length;
var expected = args.callee.length;
if(actual != expected){
throw Error(`Expected ${expected} ,args got ${actual}`)
}
}
function f(x,y,z){
check(arguments);
return x+y+z;
}
f(1,2)

2.call()和apply()方法

可以将call()和apply()看做是某个对象的方法,里面的第一个实参是要调用函数的母对象,即上下文,在函数体内是通过this来获得对它的引用。例如:

f.call(o)
f.apply(o)

对象o来调用函数f();

f.call(o,1,2)
f.apply(o,[1,2])

call和apply类似的功能,唯一不同就是传入实参的形式,call是单个传,apply是以数组的形式传入。

3,bind()方法
var g = f.bind(o);
将函数f绑定到o上面,可以通过g(x)来调用o.f(x);

4,toString方法

foo.toString()
"function foo(x,y){
return x+y;
}"
Date.toString()
"function Date() { [native code] }"

5,构造函数

var f = new Function('x','y','return x+y;')

Function()构造函数可以传入任意数量的字符串实参,最后一个实参所代表的文本就是函数体。

6,可调用的对象

Window.alert()

Document.getElementById()

RegExp对象
本质上不是Function对象,

这里:检测一个对象是不是函数,最好检测它的class属性

Object.prototype.toString.call(foo)
"[object Function]"

7,函数式编程

map()和reduce()来实现一个数组的平均值和标准差

 var data = [1,2,3,4,5];
var sum = function(x,y){return x+y};
var squarte = function(x){return x*x};
var mean = data.reduce(sum,0)/data.length;
var deviations = data.map(function(v){return v - mean});
var stddev = Math.sqrt(deviations.map(squarte).reduce(sum,0)/data.length) mean
3
stddev
1.4142135623730951

如果一味的用for循环,那么就不是函数式编程了,reduce(cb,originItem)。

8,高阶函数
即操作函数的函数。它接收一个或者多个函数作为参数,并返回 一个新函数。

function not(f){
return function(){
var result = f.apply(this,arguments);
console.log("this",this)
return !result;
}
} var even = function(x){
return x%2 === 0;
}
var odd = not(even);
[1,1,3,5,5].every(odd);

还有一个更常见的例子:f(g())

 function compost(f,g){
return function(){
return f.call(this,g.apply(this,arguments));
}
}

JavaScript的函数(三)的更多相关文章

  1. 函数原型属性-JavaScript深入浅出(三)

    前两次总结了JavaScript中的基本数据类型(值类型<引用类型>,引用类型<复杂值>)以及他们在内存中的存储,对内存空间有了一个简单的了解,以及第二次总结了this深入浅出 ...

  2. JavaScript学习总结(三)——闭包、IIFE、原型、函数与对象

    一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...

  3. javascript基础程序(算出一个数的平方值、算出一个数的阶乘、输出!- !- !- !- !- -! -! -! -! -! 、函数三个数中的最大数)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. JavaScript学习笔记(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  5. JavaScript中函数函数的定义与变量的声明<基础知识一>

    1.JavaScript中函数的三种构造方式 a.function createFun(){ } b.var createFun=function (){ } c.var createFun=new ...

  6. JavaScript学习总结(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  7. 5种 JavaScript 调用函数的方法

    一次又一次的,我发现,那些有bug的Javascript代码是由于没有真正理解Javascript函数是如何工作而导致的(顺便说一下,许多那样的代码是我写的).JavaScript拥有函数式编程的特性 ...

  8. JavaScript框架设计(三) push兼容性和选择器上下文

    JavaScript框架设计(三) push兼容性和选择器上下文 博主很久没有更博了. 在上一篇 JavaScript框架设计(二) 中实现了最基本的选择器,getId,getTag和getClass ...

  9. JavaScript调用函数的方法

    摘要:这篇文章详细的介绍了Javascript中各种函数调用的方法及其原理,对于理解JavaScript的函数有很大的帮助! 一次又一次的,我发现,那些有bug的Javascript代码是由于没有真正 ...

  10. javascript篇-----函数作用域,函数作用域链和声明提前

    在一些类似C语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的(也就是我们不能在代码段外直接访问代码段内声明的变量),我们称之为块级作用域,然而,不同于 ...

随机推荐

  1. VBA编程常用词汇英汉对照表

    表 20‑1到表 20‑8是VBA编程中使用频率最高的英文单词,按字母排序.词性列中,a表示形容词,n表示名词,v表示动词,p表示介词以及其他词性. 表 20‑1 VBA编程常用词汇表 单词 中文 词 ...

  2. Ubuntu 12.04 编译bcm93349dcm软件包

    1.准备工作操作系统:Ubuntu 12.04 获取bcm93349dcm软件包: bootloader源代码:Bootloader_2_2_0.zip CM源代码:ProdD20_BFC4.4.10 ...

  3. MySQL的详细操作

    MySQL的详细操作 存储引擎 不同的数据应该有不同的处理机制 mysql存储引擎 Innodb:默认的存储引擎 查询速度较myisam慢 但是更安全,支持事务,行锁,外键由于以上的支持,数据更安全, ...

  4. android完整智能家居、备忘录、蓝牙配对、3D动画库、购物车页面、版本更新自动安装等源码

    Android精选源码 app 版本更新.下载完毕自动自动安装 android指针式分数仪表盘 ANdroid蓝牙设备搜索.配对 Android 图片水印框架,支持隐形数字水印 android3D旋转 ...

  5. jenkins-定时跑代码

    build periodically和poll scm都可以定时运行

  6. Kafka、RabbitMQ、RocketMQ、ActiveMQ

    一.资料文档 Kafka:中.有kafka作者自己写的书,网上资料也有一些.rabbitmq:多.有一些不错的书,网上资料多.zeromq:少.没有专门写zeromq的书,网上的资料多是一些代码的实现 ...

  7. crack|erosion|strip|

    V-ERG (使)破裂;(使)裂开;(使)断裂 If something hard cracks, or if you crack it, it becomes slightly damaged, w ...

  8. MyBatis学习笔记二:MyBatis生产中使用环境搭建

    这里是在上一个环境的基础上修改的,这里就不在给出所有的配置,只给出哪里修改的配置 1.修改POJO对象为注解方式 2.创建Dao层接口 package com.orange.dao; import c ...

  9. unittest(6)- 作业- 测试类中写多个函数

    实践作业:对多个接口发起请求,测试类中写多个测试函数 # 1. http_request import requests class HttpRequest: def http_request(sel ...

  10. TensorFlow_Faster_RCNN中demo.py的运行(CPU Only)

    GitHub项目地址,https://github.com/endernewton/tf-faster-rcnnTensorflow Faster RCNN for Object Detection. ...