Javascript,闭包中的 return 函数如何与外部函数连接
Javascript, how return functions in closures are concatenated with the outer function
function func() {
return this == myObject;
}
var boundFunc = func.bind(myObject, "arg1", "arg2");
boundFunc("arg3", "arg4");
Function.prototype.bind = function() {
var fn = this;
var args = Array.prototype.slice.call(arguments);
var object = args.shift();
return function() {
var allArgs = args.concat(Array.prototype.slice.call(arguments))
return fn.apply(object, allArgs);
};
}
上面的代码片段需要一些帮助。我想我明白了,除了一件事。
我不明白这是怎么回事:
return function() {
var allArgs = args.concat(Array.prototype.slice.call(arguments))
return fn.apply(object, allArgs);
};
指的是这个:
boundFunc("arg3", "arg4");
我知道当调用 bind 时 args
获取参数(myObject、arg1、arg2)。但我不明白 return function()
是如何引用 boundfunc
以便将 arg3
和 arg4
与 args
连接起来的。那有意义吗?任何人都可以为我阐明这个主题吗?
如果反汇编代码,会发生这种情况:
var boundFunc = function() {
var allArgs = ["arg1", "arg2"].concat([].slice.call(arguments))
return func.apply(myObject, allArgs);
};
保留 .bind()
中的参数并返回一个代理函数,该函数将调用 func
并结合先前的参数和调用中传递的新参数。
function func() {
return this == myObject;
}
var boundFunc = func.bind(myObject, "arg1", "arg2");
boundFunc("arg3", "arg4");
Function.prototype.bind = function() {
var fn = this;
var args = Array.prototype.slice.call(arguments);
var object = args.shift();
return function() {
var allArgs = args.concat(Array.prototype.slice.call(arguments))
return fn.apply(object, allArgs);
};
}
上面的代码片段需要一些帮助。我想我明白了,除了一件事。
我不明白这是怎么回事:
return function() {
var allArgs = args.concat(Array.prototype.slice.call(arguments))
return fn.apply(object, allArgs);
};
指的是这个:
boundFunc("arg3", "arg4");
我知道当调用 bind 时 args
获取参数(myObject、arg1、arg2)。但我不明白 return function()
是如何引用 boundfunc
以便将 arg3
和 arg4
与 args
连接起来的。那有意义吗?任何人都可以为我阐明这个主题吗?
如果反汇编代码,会发生这种情况:
var boundFunc = function() {
var allArgs = ["arg1", "arg2"].concat([].slice.call(arguments))
return func.apply(myObject, allArgs);
};
保留 .bind()
中的参数并返回一个代理函数,该函数将调用 func
并结合先前的参数和调用中传递的新参数。