这条线在做什么:
var tfun = new Function("_", "at" , "with(_) {return (" + text + ");}" );
什么是_
,at
和with(_)
?
我读过这个: 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/
答案 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
,但大部分时间都不需要,所以你应该尝试找出正在做的事情的正确方法。