相关疑难解决方法(0)

给定一个描述Javascript函数的字符串,将其转换为Javascript函数

假设我有一个类似下面的Javascript字符串

var fnStr = "function(){blah1;blah2;blah3; }" ;
Run Code Online (Sandbox Code Playgroud)

(这可能来自用户输入的表达式,正确消毒,或者可能是某些符号计算的结果.这无关紧要).

我想定义fn好像我的代码中有以下行:

var fn = function(){blah1;blah2;blah3; } ;
Run Code Online (Sandbox Code Playgroud)

我怎么做?

我提出的最好的是以下内容:

var fn = eval("var f = function(){ return "+fnStr+";}; f() ;") ;
Run Code Online (Sandbox Code Playgroud)

这似乎是诀窍,即使它使用了可怕的eval(),并使用了一个稍微复杂的论点.我可以做得更好吗?即要么不使用eval(),要么提供更简单的参数?

javascript

44
推荐指数
5
解决办法
5万
查看次数

依赖Function.prototype.toString是否安全?

依赖于Function.prototype.toString返回将解析为有效javascript函数的字符串(对于用户定义的函数)是否安全?

是否有任何常用的javascript引擎偏离规范,就如何以字符串形式表示函数对象?

我已经看到了这个问题,但我不确定它是否也在问同样的问题.我不在乎所有实现中的格式是否完全相同或者其他什么,我更担心一些缩小的js引擎只是剥离整个函数体...

另一个相关的问题,但没有足够密切相关的问题得到令人满意的答案.

javascript function cross-browser tostring

12
推荐指数
1
解决办法
1657
查看次数

Javascript,如何编写一个Array.sort方法,以便通过超时策略调用它?

我的sort()函数存在瓶颈,例如:

list.sort(function (a,b) {return (a.value - b.value);});
Run Code Online (Sandbox Code Playgroud)

冻结浏览器几秒钟.

对于循环的相同情况,建议使用"超时"策略,例如此处描述的策略:

如何阻止激烈的Javascript循环冻结浏览器

那么,问题是,这可以用排序方法实现吗?

*在评论讨论后编辑

// main_div is a div defined before
for (let i=0; i<list.length; i++) {
    main_div.appendChild(document.getElementById(list[i].id));
}
Run Code Online (Sandbox Code Playgroud)

javascript sorting freeze

0
推荐指数
1
解决办法
876
查看次数

标签 统计

javascript ×3

cross-browser ×1

freeze ×1

function ×1

sorting ×1

tostring ×1