Javascript 为什么不能将函数分配给变量并保留其功能?
这项工作:Javascript 为什么不能将函数分配给变量并保留其功能?,javascript,jquery,Javascript,Jquery,这项工作: var foo = $("#bar"); foo.html("Hello."); 这并不是: var foo = $("#bar").html; foo("Hello."); 什么会破坏功能?当调用html方法时,需要在此时传入参数。简单地说,它就是不能那样工作。如果你做了一件事 var myHtml = 'hello world'; var foo = $('#bar').html(myHtml); 你会发现它是有效的。调用方法时,参数应与其关联。。。 实际上
var foo = $("#bar");
foo.html("Hello.");
这并不是:
var foo = $("#bar").html;
foo("Hello.");
什么会破坏功能?当调用html方法时,需要在此时传入参数。简单地说,它就是不能那样工作。如果你做了一件事
var myHtml = 'hello world';
var foo = $('#bar').html(myHtml);
你会发现它是有效的。调用方法时,参数应与其关联。。。
实际上,您将属性“html”分配给Jquery对象,它将覆盖该方法。
我很确定…这应该:
var bar = $("#bar");
var foo = bar.html.bind(bar);
foo("Hello.");
在第二个示例中,当您将html函数分配给foo变量时,它丢失了调用上下文。jQuery在调用它们的函数时引用了该上下文。如果我们用bind之类的东西来设置,我们可以使您的示例生效
//正常情况
//$'bar'.html'Hello World';
//保存html函数以备以后使用
//jQuery依赖于“this”,因此我们必须确保保留该引用。
var barHtml=$'bar.html.bind$'bar';
barHtml“来自函数引用的Hello”;
在您的示例中,html引用不起作用的原因是,在调用函数时,函数中的作用域发生了变化 在普通示例中,即$'bar'.html'Hello',这是指jQuery对象中保存的doElement 在函数引用版本中,这已更改为指向窗口。要解决此问题,需要使用call调用提供此范围的html方法引用 从下面的示例中可以看出,这并没有多大帮助,因为需要调用DOM两次才能检索bar元素 var foo=$bar.html; 喂,打电话给$bar,你好。;
我猜第二个调用将在WindowScope中运行,可能是因为调用并传递一个值将返回文档中所示的jQuery对象的实例。如果保存函数引用,它可能会丢失对象引用。只是一个猜测。OP问他为什么不能将对html方法的引用存储在一个变量中——这是一件非常有效的事情。或者只是更改foohhello。;打电话给foo.call$bar,你好。