Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.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_Scope_This - Fatal编程技术网

如何推进';这';javascript中函数调用的作用域

如何推进';这';javascript中函数调用的作用域,javascript,scope,this,Javascript,Scope,This,如何将引用到调用事件侦听器的元素的此范围转发 例如: <input type=button value="Foo" id=mybutton> 使用JavaScript或以下方法: 使用fn.call()。请参阅MDN的参考资料 .call()和.apply()都允许您指定此指针在被调用函数中的位置 .call()用于传递希望被调用函数接收的特定附加参数,如下所示: fn.call(this, true, "foo")` var args = [true, "foo"]; fn.a

如何将引用到调用事件侦听器的元素的
范围转发

例如:

<input type=button value="Foo" id=mybutton>
使用JavaScript或以下方法:

使用
fn.call()。请参阅MDN的参考资料

.call()
.apply()
都允许您指定
指针在被调用函数中的位置

.call()
用于传递希望被调用函数接收的特定附加参数,如下所示:

fn.call(this, true, "foo")`
var args = [true, "foo"];
fn.apply(this, args);
.apply()
在要传递给被调用函数的参数位于一个数组中时使用,您只需像这样传递参数数组:

fn.call(this, true, "foo")`
var args = [true, "foo"];
fn.apply(this, args);
.apply()
通常与内置arguments对象一起使用,以将现有参数传递给被调用函数(尽管使用它还有其他原因):


您可以在hover()方法上使用function.Call()方法,该方法将调用hover方法

调用方法的第一个参数是一个值,应该在调用方法中分配给它

例如:

addEvent('mybutton','touchstart', function(){
if(window['touchmoved']==false)
{

}
    hover.call(this); 
});


function hover(){
    //this = touchstart event
}

Call和Apply几乎完全相同-除了Apply需要第二个参数之外-Call不:)因此,当您不需要分配除此之外的任何其他值时,请使用Call for,当您需要分配其他值时,请使用Apply.@Stuart.Sklinar:
不需要第二个参数。Apply
。请参阅第2步。除非您知道一个特定的实现问题?我收回它-我在某个地方读到它是必需的-但我站在更正-感谢链接!要预测可能出现的进一步问题:如果要在
this
上传递参数,请使用:
hover.call(this,“something”)
,它调用
hover(“something”)
(this=this)。
.call()
肯定不是异步的。(就此而言,回调通常不是天生异步的,尽管许多异步进程都使用回调机制。)@nnnnnnnn顺便说一句,我知道调用异步的东西的唯一方法是使用
setTimeout
setInterval
还有其他方法吗?@Vitimtk-Ajax调用通常是一个很好的例子(但不一定)使用指定的回调。您也可以异步加载脚本文件。请注意(无论如何,web workers之前的)所有JS都在一个线程中运行,因此异步代码不会同时运行,它会在当前块完成时排队等待。但调用不是真正的异步,只是在onchangestate上触发了一个事件(只是数据下载是同步的),我想知道如何通过另一个函数调用同步的函数,所以
setTimeout(func2,1);
是调用另一个函数而不停止实际作用域的唯一方法。可能重复
fn.apply(this, arguments);
addEvent('mybutton','touchstart', function(){
if(window['touchmoved']==false)
{

}
    hover.call(this); 
});


function hover(){
    //this = touchstart event
}