我今天在IE8中遇到了一个问题(注意我只需要支持IE)我似乎无法解释:使用命名的匿名函数处理程序时detachEvent不起作用.
document.getElementById('iframeid').attachEvent("onreadystatechange", function onIframeReadyStateChange() {
if (event.srcElement.readyState != "complete") { return; }
event.srcElement.detachEvent("onreadystatechange", onIframeReadyStateChange);
// code here was running every time my iframe's readyState
// changed to "complete" instead of only the first time
});
Run Code Online (Sandbox Code Playgroud)
我最终发现改变onIframeReadyStateChange以使用arguments.callee(我通常会避免)而不是解决了这个问题:
document.getElementById('iframeid').attachEvent("onreadystatechange", function () {
if (event.srcElement.readyState != "complete") { return; }
event.srcElement.detachEvent("onreadystatechange", arguments.callee);
// code here now runs only once no matter how many times the
// iframe's readyState changes to "complete"
});
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?!第一个代码段不应该正常工作吗?
javascript internet-explorer anonymous-function javascript-events
为什么这在Firebug控制台中不起作用:
function(s,e) {
setTimeout(function(){grvClosingDocs.Refresh();CBPDocFlow.PerformCallback();},100)
}
Run Code Online (Sandbox Code Playgroud)
虽然这样做:
setTimeout(function(){grvClosingDocs.Refresh();CBPDocFlow.PerformCallback();},100)
Run Code Online (Sandbox Code Playgroud) mysub 获取子例程引用作为其第一个参数.
我可以直接打电话mysub(sub{some subroutine body here})吗?即在通话时定义一个匿名子程序?
语法是否正确(是否真的是对它的引用sub传递)?
我想将一个函数设置为数组中每个元素的属性,但是使用不同的参数调用它.我以为我会用匿名函数解决它:
for ( var i = 0; i < object_count; i++ ) {
objects[i].callback = function(e,x,y){ cb(e,x,y,i) };
}
Run Code Online (Sandbox Code Playgroud)
但是,使用当时具有的值调用该函数i.我如何保留上下文?
Java风格的匿名回调包括相对多的样板,并且不能阅读.有类似的东西会很高兴
workExpression
Run Code Online (Sandbox Code Playgroud)
代替
new SomeIF {
@Override public someType doRun() {
return workExpression
}
}
Run Code Online (Sandbox Code Playgroud)
有哪些可能的解决方案?
Scala中是否有成功和失败关闭的替代模式?
这个约定与node.js库通常做的类似,但是我只是想知道在Scala中是否有另一种方法可以做到这一点.
例如:
def performAsyncAction(n: BigInt,
success: (BigInt) => Unit,
failure: FunctionTypes.Failure): Unit = {
Run Code Online (Sandbox Code Playgroud)
然后调用该函数
performAsyncAction(10,
{(x: BigInt) =>
/* Code... */
},
{(t: Throwable) =>
e.printStackTrace()
})
Run Code Online (Sandbox Code Playgroud)
谢谢
我希望能够修改传递给自执行函数的参数.
以下是一些示例代码:
var test = 'start';
(function (t) {t = 'end'} )(test);
alert(test) //alerts 'test'
Run Code Online (Sandbox Code Playgroud)
而这里是一个小提琴.变量test没有改变.我怎样才能改变它,就像传递参考一样?
javascript anonymous-function pass-by-reference self-executing-function
我正在使用这样的结构:
string myurl = "http://google.de";
Task.Factory.StartNew(() =>
{
MessageBox.Show(url);
});
Run Code Online (Sandbox Code Playgroud)
如何将myurl传递给匿名函数?
var client = new WebClient();
var bytes = client.DownloadData(webUrl); <-- NOT null
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
BitmapImage img = new BitmapImage();
img.BeginInit();
img.StreamSource = new MemoryStream(bytes); <-- null
img.EndInit();
img_DownloadCompleted(img, webUrl);
}));
Run Code Online (Sandbox Code Playgroud)
上述代码在线程中执行,以避免阻止UI.
我试图将图像从互联网下载到BitmapImage对象中.图像下载正确,但当我尝试在我的UI(使用Dispatcher.Invoke)中使用它时,我收到此错误消息:The calling thread cannot access this object because a different thread owns it.
所以我添加了在UI线程上创建图像的代码.但是现在,当代码到达<-- null变量bytes所指示的行时突然变为空.在执行进入匿名函数之前它不为null.(我查看了调试器)
有人知道为什么吗?谷歌不是很有帮助.
更改变量类型的bytes,以var不作任何区别.