javascript函数名与函数文字用法

javascript函数名与函数文字用法,javascript,Javascript,测试部分求值函数时: function partialEval(fn) { var sliceMethod = Array.prototype.slice; if(arguments.length > 1) { var aps = sliceMethod.call(arguments, 1); } return function () { return fn.apply(this,ap

测试部分求值函数时:

function partialEval(fn)
   {
      var sliceMethod = Array.prototype.slice; 
      if(arguments.length > 1)
      {
        var aps = sliceMethod.call(arguments, 1);
      }


      return function () {
         return fn.apply(this,aps.concat(  sliceMethod.call(arguments)  ));  
    };

    }




    var x= function add(a,b,c,d){
     console.debug(a +  " - " +  b +  " - " +  c +  " - " +  d);
     return a+b+c+d; 

    }

    var pa = partialEval(add, 1,2); // Query here
    var zz = pa(3,4);
    console.debug(zz);
调用partialEval(add,1,2)和partialEval(x,1,2)有什么区别? 我知道这里x是一个函数文本,使用x可以得到正确的结果。但是当我使用add作为发送给partialEval方法的函数名时,输出是3。有人能解释一下两者在执行上的差异吗

谢谢。

当您这样做时:

var x = function add(a,b,c,d){
  // code...
}

add
应仅存在于函数内部(并指函数本身)。在需要使用的函数之外,
x
add
将是
未定义的

我认为命名函数是提升的,而函数文本不是


但没有理由同时使用这两种类型。我通常使用匿名函数文字,因为在我看来,它将它们映射为对象,而它们就是对象。

add
在这里不起作用。它真的有效吗?@primvdb:它可能在IE中。IE在命名函数表达式方面有缺陷。@primvdb:它在firefox 3.6中有效,我正在用firebug进行测试。.add不是未定义的。登记入住FF@Anna:似乎所有浏览器都以不同的方式处理此问题。我建议不要像这样声明函数,因为您可以看到的行为是不同的。可以说函数文字定义几乎等同于匿名函数吗?在用法上没有区别吗?@Anna:
var x=function(a,b,c,d){}
function x(a,b,c,d){}
完全相同@Anna:你所说的“function literal definitions几乎等同于匿名函数”是什么意思?