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几乎等同于匿名函数”是什么意思?