Javascript 命名对象属性函数 render:function render(上下文、部分){ 返回这个.r(上下文,部分); },

Javascript 命名对象属性函数 render:function render(上下文、部分){ 返回这个.r(上下文,部分); },,javascript,Javascript,给出Twitter新的hogan.js库中的代码来演示这个问题;两次命名函数的目的是什么?递归调用需要它。如果它愿意,函数render将能够,但是,render()无法访问 此外,在堆栈跟踪中,您会看到render作为函数名,而不是匿名函数render的第一次出现是函数存储在其中的字段名,因此您可以通过 object.render(context, partials); 第二个呈现命名函数本身。调试工具然后显示渲染,而不是仅显示函数 第二个可能的原因是函数可以递归地调用自己 var rende

给出Twitter新的hogan.js库中的代码来演示这个问题;两次命名函数的目的是什么?

递归调用需要它。

如果它愿意,函数
render
将能够,但是,
render()
无法访问

此外,在堆栈跟踪中,您会看到
render
作为函数名,而不是
匿名函数

render的第一次出现是函数存储在其中的字段名,因此您可以通过

object.render(context, partials);
第二个呈现命名函数本身。调试工具然后显示渲染,而不是仅显示函数

第二个可能的原因是函数可以递归地调用自己

var render = function render(n) {
    console.log("render");
    if (n < 1)
      render(n + 1);
};
render(0);
var render=函数render(n){
控制台日志(“呈现”);
if(n<1)
渲染(n+1);
};
渲染(0);

编辑:对不起,我在第一次修订中写了一些非常错误的东西。

必须指出的是,旧版IE中存在一个bug,即它将为命名函数表达式生成两个不同的函数。非常感谢您的解释;这一模式让我困惑了几个月。这在严格模式下也是必需的,因为
参数。调用者
参数。被调用者
都会抛出read,因此函数实际上需要命名才能调用自身。@Frédéric使用此设置是,但是,如果函数在封闭范围内是可访问的,那么它仍然可以调用自己。虽然不需要它,但它可以用于此目的。