相关疑难解决方法(0)

是否有任何非eval方法来创建具有运行时确定名称的函数?

有没有办法创建一个具有在运行时确定的实名的函数,而不使用eval纯JavaScript?(因此,没有生成的script元素,因为那些特定于浏览器环境[并且在许多方面eval无论如何都会伪装];不使用某个特定JavaScript引擎的非标准功能等)

请注意,我特别询问变量或具有名称的属性引用的匿名函数,例如:

// NOT this
var name = /* ...come up with the name... */;
var obj = {};
obj[name] = function() { /* ... */ };
Run Code Online (Sandbox Code Playgroud)

在那里,虽然object属性有一个名称,但函数却没有.匿名函数适用于很多东西,但不是我在这里寻找的东西.我希望函数有一个名称(例如,在调试器中显示调用堆栈等).

javascript

33
推荐指数
2
解决办法
5126
查看次数

将eval()限制在狭窄的范围内

我有一个javascript文件,读取另一个文件,其中可能包含需要eval() - ed的javascript片段.脚本片段应该符合javascript的严格子集,这限制了它们可以做什么以及它们可以更改哪些变量,但我想知道是否有某种方法可以通过阻止eval在全局范围内查看变量来强制执行此操作.类似于以下内容:

function safeEval( fragment )
{
    var localVariable = g_Variable;

    {
        // do magic scoping here so that the eval fragment can see localVariable
        // but not g_Variable or anything else outside function scope

        eval( fragment );
    }
}
Run Code Online (Sandbox Code Playgroud)

实际的代码不需要看起来像这样 - 我对任何和所有带闭包的奇怪技巧都是开放的等等.但我确实想知道这是否可能.

javascript eval

31
推荐指数
4
解决办法
2万
查看次数

在JavaScript中指定eval()的范围?

有什么办法可以在特定范围内执行eval()(但不是全局)

例如,以下代码不起作用(在第二个语句中未定义)因为它们位于不同的范围内:

eval(var a = 1); 
eval(alert(a));
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我想动态创建一个范围.例如(语法肯定是错误的,但只是为了说明这个想法)

var scope1;
var scope2;
with scope1{
    eval(var a = 1); eval(alert(a));  // this will alert 1
}
with scope2{
    eval(var a = 1); eval(a++); eval(alert(a));  // this will alert 2
}
with scope1{
    eval(a += 2); eval(alert(a)); // this will alert 3 because a is already defined in scope1
}
Run Code Online (Sandbox Code Playgroud)

有关如何实现这样的事情的任何想法?谢谢!

javascript scope eval

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

标签 统计

javascript ×3

eval ×2

scope ×1