3

我正在为学习目的在 JavaScript 上编写类似 Lisp 的语言。每个对象都是树的一部分,因此它必须跟踪其父对象。唯一的问题是数字和字符串:

foo = {};
var a = 1;
a.parent = foo;

这行不通。我必须这样做:

foo = {};
var a = {type:'number',value:1,parent:foo}

因此,我必须将我的语言中的每个数字和字符串都装在这样的散列中。我假装对所说的语言做了一些广泛的矩阵数学,所以我很担心。这种方法会影响性能吗?

4

1 回答 1

1

正如里德建议的那样:

function number(n){
    return {type:'number',parent:undefined,value:n};
}
function sum(a,b){
    return {type:'number',parent:undefined,value:a.value+b.value};
}
var i = number(0);
for (var t=Date.now(); Date.now()-t < 1000;){
    var i=sum(i,number(1));}
console.log('Operations with boxing: ',i.value);
var i = 0;
for (var t=Date.now(); Date.now()-t < 1000;){
    var i=i+1;}
console.log('Operations without boxing: ',i);

输出:

Operations with boxing: 1911258
Operations without boxing: 16805783

这可能回答了这个问题。我想知道是否有替代方案不会对性能造成如此大的影响。

于 2012-08-25T17:21:23.400 回答