JavaScript的函数(三)
函数也是对象,拥有属性和方法,就类似普通对象那样。
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的函数(三)的更多相关文章
- 函数原型属性-JavaScript深入浅出(三)
前两次总结了JavaScript中的基本数据类型(值类型<引用类型>,引用类型<复杂值>)以及他们在内存中的存储,对内存空间有了一个简单的了解,以及第二次总结了this深入浅出 ...
- JavaScript学习总结(三)——闭包、IIFE、原型、函数与对象
一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...
- javascript基础程序(算出一个数的平方值、算出一个数的阶乘、输出!- !- !- !- !- -! -! -! -! -! 、函数三个数中的最大数)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JavaScript学习笔记(三)——this、原型、javascript面向对象
一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...
- JavaScript中函数函数的定义与变量的声明<基础知识一>
1.JavaScript中函数的三种构造方式 a.function createFun(){ } b.var createFun=function (){ } c.var createFun=new ...
- JavaScript学习总结(三)——this、原型、javascript面向对象
一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...
- 5种 JavaScript 调用函数的方法
一次又一次的,我发现,那些有bug的Javascript代码是由于没有真正理解Javascript函数是如何工作而导致的(顺便说一下,许多那样的代码是我写的).JavaScript拥有函数式编程的特性 ...
- JavaScript框架设计(三) push兼容性和选择器上下文
JavaScript框架设计(三) push兼容性和选择器上下文 博主很久没有更博了. 在上一篇 JavaScript框架设计(二) 中实现了最基本的选择器,getId,getTag和getClass ...
- JavaScript调用函数的方法
摘要:这篇文章详细的介绍了Javascript中各种函数调用的方法及其原理,对于理解JavaScript的函数有很大的帮助! 一次又一次的,我发现,那些有bug的Javascript代码是由于没有真正 ...
- javascript篇-----函数作用域,函数作用域链和声明提前
在一些类似C语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的(也就是我们不能在代码段外直接访问代码段内声明的变量),我们称之为块级作用域,然而,不同于 ...
随机推荐
- JVM如何判断对象能否被回收
•写在前面说起Java和C++,很容易想到让人疯狂的指针,Java使用了内存动态分配和垃圾回收技术,让我们从C++的各种指针问题中摆脱出来,更加专心于业务逻辑,不过如果我们需要深入了解java的JVM ...
- 对Java8新的日期时间类的学习(二)
示例11 在Java中如何判断某个日期是在另一个日期的前面还是后面 这也是实际项目中常见的一个任务.你怎么判断某个日期是在另一个日期的前面还是后面,或者正好相等呢?在Java 8中,LocalDate ...
- 学习python-20191208(2)-Python Flask高级编程开发鱼书_第03章_数据与flask路由
视频06: 定义静态方法的两种方式: 1.在方法上方加上装饰@staticmethod 2.在方法上方加上装饰@classmethod 方法中要加参数cls 如:def search_by_isb ...
- 规范化开发和time相关模块
1. 规范化开发 如果在开发的过程中将所有的程序放在一个py文件中,加载时会很慢,同时降低了代码的可读性,查询起来也麻烦 所以要将一个oy文件合理的分成多个py文件,在blog大目录下分为以下几个部分 ...
- testNG报告优化,testNG-xslt
一.在使用testNG自动化框架执行测试用例后,会自动生成HTML的测试报告,但是过于简单,信息展示极少,也没有图表说明,所有我们使用testNG-xslt进行美化. 二.具体实现步骤: 1.在网站下 ...
- Java IO: 其他字节流(上)
作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackInputStream,SequenceInputS ...
- iOS UITableView Tips(2)
#TableView Tips(2) (本来想一章就结束TableView Tips,但是发现自己还是太天真了~too young,too simple) ##架构上的优化 在Tips(1)中指出了一 ...
- [LC] 74. Search a 2D Matrix
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...
- IP地址结构分类(包括主机号和网络好计算)
IP地址:互联网上的每个接口的唯一标识. 长度:32bit. 五类不同的互联网地址格式: 各类IP地址范围: 点分十进制:32位的地址通常写成四个十进制数,其中每个整数对应一个字节. 主机号和网络的计 ...
- pycharm中无法导入pip安装的包
https://blog.csdn.net/mdxiaohu/article/details/82430060 2020.1.20 练习通过python操作数据库的时候需要导入一个包,因为看代码写的是 ...