Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不能将函数分配给变量并保留其功能?_Javascript_Jquery - Fatal编程技术网

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,你好。