我有web应用程序,它使用jsonp返回javascript代码到客户端.
这是我返回的代码(使其无法读取):
com.xx.load('xx','var name="hguser";function data(x){console.info(x); }')
Run Code Online (Sandbox Code Playgroud)
在load功能中,我们eval的代码.
但是,我们发现它不可读,但它是不可调试的.
所以我想知道我们是否可以使用它:
com.xx.load('xx',function(){
var name='hguser';
function data(x){
console.info(x);
}
});
Run Code Online (Sandbox Code Playgroud)
然后,在代码字符串的load函数insead中eval,我们现在将成为eval一个函数对象.
这可能吗?
他们的意思是一样的吗?
你当然可以。这就像在 JavaScript 中模拟动态作用域一样。有几点需要注意:
eval一个函数。您需要将其转换为字符串。使用eval(String(f))。f一个名字。你做不到var g = eval(String(f))。使用函数名称。f将可以访问所有局部变量。例如:
eval(String(getAdder()));
alert(add(2, 3));
function getAdder() {
return function add(a, b) {
return a + b;
};
}
Run Code Online (Sandbox Code Playgroud)
您可以在这里看到演示:http://jsfiddle.net/5LXUf/
只是一个想法 - 为什么不直接调用函数对象而不是评估它呢?这将为您提供堆栈跟踪,并且更简单、更安全(该函数将无法访问您的局部变量)。
| 归档时间: |
|
| 查看次数: |
320 次 |
| 最近记录: |