javascriptダイナミック作成関数
1513 ワード
動的作成関数の3つの方法
書式の作成
例
テストコード
締め括りをつける
これは失敗のテストです.
書式の作成
new Function(arg1,arg2,arg...,body)
Function.call(_,arg1,arg2,arg...,body)
Function.appy(_,[arg1,arg2,arg...,,body])
argN
、body
はすべてstringタイプで、_
は任意の値であってもよく、彼がどんな役割をしているかは調べられませんでした.Function.applyの2番目のパラメータもarray-like objectであってもいいです.例
var body="console.log(this);
return 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この結果は3つの作成方式の速度を表していません.テストコードを実行するたびに結果が浮動しますが、大体265~285の間に循環回数が高くなれば、chrome consolieでnodeJSの3つの方法の結果が1.xになります.ほとんど無視できます.締め括りをつける
これは失敗のテストです.