如本博文中所述,您可以this在Javascript中设置匿名函数的范围.
在AJAX请求this的匿名函数调用中是否有更优雅的方法作用success(即不使用that)?
例如:
var Foo = {
bar: function(id) {
var that = this;
$.ajax({
url: "www.somedomain.com/ajax_handler",
success: function(data) {
that._updateDiv(id, data);
}
});
},
_updateDiv: function(id, data) {
$(id).innerHTML = data;
}
};
var foo = new Foo;
foo.bar('mydiv');
Run Code Online (Sandbox Code Playgroud)
使用调用但仍必须命名父对象范围that.
success: function(data) {
(function() {
this._updateDiv(id, data);
}).call(that);
}
Run Code Online (Sandbox Code Playgroud) 我有以下匿名功能:
(function() {
var a = 1;
var b = 2;
function f1() {
}
function f2() {
}
// this => window object!
// externalFunction(this);
})();
function externalFunction(pointer) {
// pointer.f1(); => fail!
}
Run Code Online (Sandbox Code Playgroud)
我需要从这个匿名函数调用外部函数,并将它的指针传递给调用函数f1和f2.但我不能这样做,因为这引用了窗口对象而不是内部范围.
我可以将功能设置为:
this.f1 = function() {}
Run Code Online (Sandbox Code Playgroud)
但这是个坏主意,因为他们将在全球空间......
如何将匿名空间传递给外部函数?
我有一个方法需要有条件地执行一个方法,如下所示:
int MyMethod(Func<int> someFunction)
{
if (_someConditionIsTrue)
{
return someFunction;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我希望能够将Linq查询作为someFunction传递给MyMethod:
int i = MyMethod(_respository.Where(u => u.Id == 1).Select(u => u.OtherId));
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
我必须遗漏一些非常简单的东西,因为这似乎不应该是这么难.
这段代码是正确的:
clear all
whatever = @(x) deal(max(x), size(x));
input = randn(1,1000);
[a b] = whatever(input)
Run Code Online (Sandbox Code Playgroud)
但是,我真正想做的是这样的事情:
clear all
whatever = @(x) deal(q = 3; q*max(x), size(x));
input = randn(1,1000);
[a b] = whatever(input)
Run Code Online (Sandbox Code Playgroud)
这为什么会破裂?我不能在函数内定义q?我想使用匿名函数的全部原因是我实际上可以在其中执行多行代码,然后返回一个答案.我想匿名函数的最后一个语句是返回的,但是如何在其中定义变量?我不想在匿名函数的定义之前定义q.
谢谢.
我正在阅读有关如何在窗口调整大小完成后触发函数的帖子,并且遇到了一些将自动执行匿名函数分配给变量的示例:
var delay = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
$(window).resize(function() {
delay(function(){
alert('Resize...');
//...
}, 500);
});
Run Code Online (Sandbox Code Playgroud)
与传统用法相比,使函数操作数自行执行有什么区别/好处?即
var delay = function() { ...
Run Code Online (Sandbox Code Playgroud) 我的结构中的一个字段是函数句柄:
strct.handl=@(arg1,arg2)handl(arg1,arg2,par1,par2)
Run Code Online (Sandbox Code Playgroud)
现在,每次使用句柄时都会定义arg1和arg2,但是在定义句柄时会存储par1和par2.因此,(纠正我,如果我错了),处理像par1和par2指针的功能.
在任何一种情况下,我的问题是我如何看到我的内存句柄占用了多少空间,因为它也"指向"par1和par2.但是,如果我使用whos('handl'),我将只获得句柄的大小,而不是处理+ par1 + par2.
谢谢!
我有一组字符串vals,例如:
vals = {'AD', 'BC'}
Run Code Online (Sandbox Code Playgroud)
我还有一个结构info,其中的结构嵌套在对应于数组中元素的字段中vals(在本例中为'AD'和'BC'),每个结构依次在一个名为的字段中存储一个数字lastcontract.
我可以使用for循环来提取lastcontract每个vals这样的:
for index = 1:length(vals)
info.(vals{index}).lastcontract
end
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我想找到一种没有循环的方法,但我没有运气.我试过了:
info.(vals{1:2}).lastcontract
Run Code Online (Sandbox Code Playgroud)
没有成功.我认为arrayfun可能是合适的方式,但我无法弄清楚正确的语法.
我的原始(工作)代码如下所示:
jQuery().ready(function ($) {
$('[id="errorMessages"]').ajaxStart(function () {
$(this).html("");
});
$('[id="errorMessages"]').ajaxError(function (e, jqxhr, settings, exception) {
//...
});
});
Run Code Online (Sandbox Code Playgroud)
当我试图将匿名函数替换为命名函数时,调用如下:(我正在为某些需求做一个POC,期望这样的实现.)
function fs() {
$(this).html("");
}
function fe(e, jqxhr, settings, exception) {
//...
}
jQuery().ready(function ($) {
$('[id="errorMessages"]').ajaxStart(fs());
$('[id="errorMessages"]').ajaxError(fe(e, jqxhr, settings, exception));
});
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,说明参数'e'未定义.但没有参数的函数似乎工作正常.
我想知道匿名函数如何接收参数,而调用外部函数时则不可用.
有没有办法将这些参数化的匿名函数转换为常规函数调用.
我试图做的是保留一个函数句柄的元胞数组,然后在循环中调用其中一个。它不起作用,在我看来,我得到的只是一个 1x1 元胞数组,而不是其中的函数句柄。
我不固定使用单元格数组,所以如果另一个集合工作对我来说很好。
这是我的代码:
func_array = {@(x) x, @(x) 2*x }
a = func_array(1) %%% a = @(x) x
a(2) %%% (error-red) Index exceeds matrix dimensions.
a(0.2) %%% (error-red) Subscript indices must either be real positive integers or
logicals.
Run Code Online (Sandbox Code Playgroud)
谢谢阿米尔
根据手册http://php.net/manual/en/function.register-shutdown-function.php, register_shutdown_function() 实现为:
<?php
function shutdown()
{
// This is our shutdown function, in
// here we can do any last operations
// before the script is complete.
echo 'Script executed with success', PHP_EOL;
}
register_shutdown_function('shutdown');
?>
Run Code Online (Sandbox Code Playgroud)
它可以作为匿名函数实现吗?如果是这样,如何?