Javascript中的Function.prototype.bind

Javascript中的Function.prototype.bind,javascript,Javascript,我有这样一个函数: function foo(){ } 我可以打这个电话: foo().bind(self); 为什么Javascript允许我在没有运行时错误的情况下执行此操作 我认为唯一有效的语法是: var func = foo.bind(self); func(); 简而言之,就是: foo.bind(self)(); 此外,我认为这样的事情是可能的: function foo(){ }.bind(self); 但最后一个似乎不起作用foo().bind(self),但

我有这样一个函数:

function foo(){

}
我可以打这个电话:

foo().bind(self);
为什么Javascript允许我在没有运行时错误的情况下执行此操作

我认为唯一有效的语法是:

 var func = foo.bind(self);
 func();
简而言之,就是:

foo.bind(self)();
此外,我认为这样的事情是可能的:

function foo(){

}.bind(self);
但最后一个似乎不起作用

foo().bind(self),但如果
foo()
未返回函数对象,则可能会抛出。像这样

function bar() {
}

function foo(){
    return bar;
}
因此,
bind
实际上将为
bar
执行

最后一个是函数声明,所以不能使用点表示法。要使之成为可能,您需要将其转换为表达式。最简单的方法是添加大括号

(function foo(){

}.bind(self));
但是,这是无用的,因为您无法存储结果。如果将其指定给
func
,则函数声明将成为表达式。以下几点至少是有意义的:

var func;
func = function foo(){

}.bind(self);

foo().bind(self)foo
返回另一个函数时,code>才会起作用,例如
function foo(){…return function(){};}
如果将函数声明包装在parens中,最后一个函数才会起作用<代码>(函数foo(){}).bind(self)
这个
foo.bind(self)(
“速记”也有点傻,因为你可以直接
foo.call(self)
。如果您立即调用它,则无需创建新函数。“没有运行时错误”嗯,我得到
TypeError:foo(…)未定义<代码>函数foo(){}.bind(self)才起作用。我还得到了运行时错误。您的示例可能缺少某些内容,或者您的浏览器有缺陷。您运行的浏览器/解释器是什么?