概述
在JavaScript里,所有的function实际上都是Function对象。
语法
var function_name = new Function([arg1[, arg2[, … argN]],] functionBody);
参数
arg1, arg2, … argN
每个都对应于有效的JavaScript标识符或用逗号分隔的字符串列表,比如:“x”,“theValue”,或“a, b”。
functionBody
该字符串包含JavaScript语句组成的函数定义。
描述
Function 对象创建于 Function 构造器被解析当function被创建时。效率低于直接定义function和从你的代码中调用。
因为函数定义于函数语句被解析。
所有的参数传递给函数作为标识符的名字。按照这个顺序传递。
函数通过Function构造器创建。不要创建闭包来创建上下文。他们总是运行在window上下文。
调用Function构造器象function一样(不使用new操作符),有同样的效果象调用Function构造器一样。
例子
通过Function构造器创建函数是动态创建不定数量对象通过一些执行脚本创建全局域的方法之一。
new Function(‘return {“a”: 1}’);
定义:JDK1.8中的新特性,表示接受一个参数并生成结果的函数。
其中:T 为输入的类型。R为函数结果的类型。
下面看该接口中的每一个方法:
R apply(T t);核心方法,把T转换成R返回。
default Function<V, R> compose(Function<? super V, ? extends T> before){},此方法的官方解释为:
返回首先将{@code before}函数应用于其输入的组合函数,然后将此函数应用于结果。 如果对任一函数的求值抛出异常,则将其转发给组合函数的调用者。
看了之后一脸懵,然后看代码具体逻辑,首先对before进行了NonNull验证,然后返回一个组合函数,函数首先用before调用apply函数,把V转换成T,然后重新创建一个Function,传入T转换成R。我个人的理解就是如果有复杂的多种类型转换,就调用这个函数。如果仅转换两次,可以直接调用此方法,如果超过两次,需要重写。规定A:如果before为null,抛出NullPointerException。
default Function<T, V> andThen(Function<? super R, ? extends V> after){}:和compose方法差不多,区别就是,andthen的after的apply方法接收的参数是一个组合,而compose方法是before先调用一次apply,转换的结果传给组合。
static Function<T, T> identity():一个总是返回其输入参数的函数。