javascript动态创建函数

动态创建函数的3种方法

创建格式
new Function(arg1,arg2,arg...,body)
Function.call(_,arg1,arg2,arg...,body)
Function.appy(_,[arg1,arg2,arg...,,body])

argN,body都是string类型,_可以为任意值,没查出来他有什么作用
Function.apply的第二个参数也可以是array-like object

例子
var body="console.log(this);\nreturn a+b;"
new Function("a","b",body)
var noop = function(){} //it can be anything, but in avalon.js, it is an empty function. don't know why
Function.call(noop,"a","b",body)
Function.apply(noop,["a","b",body])

\\result:
function anonymous(a,b
/**/) {
console.log(this);
return a+b;
}

性能测试

测试代码
var body = "return a+b;"
var noop = function() {}
var result = []
var averageTime = 0
for (var i = 0; i < 50; i++) {
    var begin = new Date
    for (var j = 0; j < 1000; j++) {
        //Function.call(1, "a"+i, "b"+i, body)//Function.apply(noop,["a"+i,"b"+i,body])//new Function("a"+i,"b"+i,body)
    }
    result.push(new Date - begin)
}

result.reduce(function(pre, curr) {
    return pre + curr
})/50

chrome 浏览器 版本 34.0.1847.131
new Function: 278.38
Function.apply:277.16
Function.call:274
这个结果并不能代表三众创建方式的快慢,因为每次运行测试代码结果浮动有些大,但大体上都在265~285之间,循环次数如果设高的话,在chrome console 会挂掉
nodeJS
三种方法的结果在1.x,几乎可以忽略不计

总结

这是个失败的测试!


转载于:https://my.oschina.net/myprogworld/blog/268510

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值