这个Javascript做了什么? `new Function(“_”,“at”,“with(_){return(”+ text +“);}”)

时间:2011-04-09 18:48:24

标签: javascript

这条线在做什么:

  var tfun = new Function("_", "at" , "with(_) {return (" + text + ");}" );

什么是_atwith(_)

我读过这个: http://www.permadi.com/tutorial/jsFunc/index.html

我知道它正在创建一个新的函数对象,但我仍然对他应该做的事感到困惑。

忘了放源: http://kite.googlecode.com/svn/trunk/kite.js

http://www.terrainformatica.com/2011/03/the-kite-template-engine-for-javascript/

2 个答案:

答案 0 :(得分:1)

这里创建的函数将返回传递给text的对象的变量tfun()中存储的键的值。

以这种方式创建new Function时,第一个参数引用函数的参数,最后一个参数是函数本身。所以这里有两个名为_at的参数,然后是函数体。

with()是一个声明,表示在指定对象的上下文中执行以下代码行。因此,with(_)正在执行返回语句,提取存储在text中的密钥_

以下是一个例子:

var text = "name";
var obj  = { "name" : "Bob" };

var tfun = new Function("_", "at" , "with(_) {return (" + text + ");}" );

tfun( obj ); // returns "Bob"

我不确定为什么at参数存在,因为它没有被使用。

答案 1 :(得分:0)

首先是函数参数,然后是代码,所以它基本上与:

相同
var tfun = function(_, at) {
  with(_) { return (eval(text)); };
}

因此,text变量中的任何内容都将被评估并从函数返回。

注意:通常应该避免使用eval函数,并且由于从变量动态创建代码做同样的事情,通常也应该避免使用它。在某些情况下需要eval,但大部分时间都不需要,所以你应该尝试找出正在做的事情的正确方法。