<button id='hello'>Click Me!</button>
Run Code Online (Sandbox Code Playgroud)
$('#hello').click(alert('Hello, World!'));
Run Code Online (Sandbox Code Playgroud)
$('#hello').click(function() {
alert('Hello, World!');
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么第一个JS代码触发事件加载而不是点击.任何人都可以告诉我为什么function() { [code] }脚本需要正常工作?
在这个例子中,我使用了jQuery事件,但这并不是特定的,例如,我也需要将它与setTimeout一起使用.
我正在使用CURLOPT_WRITEFUNCTION的 cURL选项指定一个回调来处理来自cURL请求的数据.
$serverid=5;
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.whatever.com');
curl_setopt(
$ch,
CURLOPT_WRITEFUNCTION,
function ($ch, $string) {
return readCallback($ch, $string, $serverid);
}
);
curl_exec($ch);
function readCallback($ch, $string, $serverid) {
echo "Server #", $serverid, " | ", $string;
return strlen($string);
}
Run Code Online (Sandbox Code Playgroud)
我想使用匿名函数调用我自己的函数,其中actuall确实work(readCallback()),以便我可以包含与request($serverid)相关联的服务器ID .如何正确利用闭包,以便当cURL命中我的回调匿名函数时,匿名函数知道它最初定义为$serverid=5并且可以readCallback()适当调用?
我最终将使用ParalellCur l和一个常见的回调函数,这就是为什么有一个匿名函数需要使用ID调用我的回调.
我已经决定使用闭包来代替我的回调create_function,因此只支持PHP> 5.3,主要是因为增加了可调试性,也因为我假设(他们对假设的说法是什么?)是on-the的开销. -fly编译create_function在我的情况下可能会抵消任何额外的比较,并且必须在函数内进行.
这可能仍然是这种情况(对于我的应用程序)并且需要进一步测试,但我对这个(非常)简单测试的输出感兴趣,该测试显示该create_function方法的速度比关闭时快两倍以上只有四个条件(和concats).显然在我的测试用例中没有进行额外的处理,这就是大部分速度将会获得或丢失的地方,但是在你没有多少额外处理但是有很多条件(可以删除)和回调被调用足够多次我开始认为使用它可能更好create_function.
然而,create_function和之间有明显的相似性eval,我对它很谨慎.
所以主要的问题是创建的匿名函数create_function和闭包函数之间的区别是什么?
我正在考虑的一些具体问题,create_function甚至可以在eval禁用功能时使用?并且,我确信我最近在某处读到,create_function即使声明为内部函数,函数也会污染全局(或类)命名空间,但闭包不会.我现在找不到对此的引用,但这些陈述中的一个或两个都是真的吗?
这是我跑的小测试:
<?php
function foo($a=true, $b=true, $c=true, $d=true)
{
$inner1 = create_function(
'',
'$r = \''.($a ? 'a' : '').
($b ? 'b' : '').
($c ? 'c' : '').
($d ? 'd' : '').'\';
return $r;'
);
$inner2 = function() use ($a, $b, $c, $d)
{
$r = '';
if($a) { $r .= …Run Code Online (Sandbox Code Playgroud) Javascript中的匿名函数和普通函数之间是否有任何内存使用差异?
如果是这样,怎么样?你能解释一下吗?
我想调用一个匿名函数,它不使用另一个匿名函数的简写符号.
执行以下操作无效,因为返回了上次评估:
user> ((fn [x] (fn [y] (inc y)) x) 3)
3
Run Code Online (Sandbox Code Playgroud)
现在我想有办法从外部调用内部匿名函数.
我设法通过这样做使它工作,但它看起来很复杂:
user> ((fn [x] (let [f (fn [y] (inc y))] (f x))) 3)
4 ;; good, 4 is the result I want here
Run Code Online (Sandbox Code Playgroud)
是否有更简单的方法来嵌套匿名函数?
在jQuery,匿名函数和延迟方面,我显然缺少一些基本的东西.
以下代码仅适用于每页加载ONCE(它将添加该类,然后在1秒后删除它,如果我再次单击,它将添加该类,但绝不会在页面持续时间内删除该类,除非我重新加载页面):
var jElement = $(currElem);
jElement.addClass("highlight")
.delay(1000)
.queue(function(){
$(this).removeClass("highlight");
});
Run Code Online (Sandbox Code Playgroud)
然而,
如果我将(不存在的)函数调用作为参数添加,并且我在我的匿名函数中调用它,那么添加/删除类组合将无限期地工作.
var jElement = $(currElem);
jElement.addClass("highlight")
.delay(1000)
.queue(function(randomFunction){
$(this).removeClass("highlight");
randomFunction(); //this makes it seemingly 'miraculously' work??
});
Run Code Online (Sandbox Code Playgroud)
边注:
var jElement = $(currElem);
jElement.addClass("highlight")
.delay(1000)
.queue(function(randomFunction){
$(this).removeClass("highlight");
// this does NOT work; if I dont actually call the 'randomFunction'
// so that function, even though it does nothing; must somehow cause
// the implicit call of 'dequeue()' ??
});
Run Code Online (Sandbox Code Playgroud) 我试图从Eloquent Javascript这本书中理解这个功能样式代码:
http://eloquentjavascript.net/chapter6.html#exercise1
当count()函数将一个匿名函数传递给reduce()时,代码可以工作.但是如果我将函数分解为辅助函数,那么我会得到一个引用错误.
任何人都可以解释为什么count()有效但countHelper()没有?
var numbers = [1,2,3,0,1,2,3,0]
function forEach(array, action) {
for (var i = 0; i < array.length; i++)
action(array[i]);
}
function reduce(combine, base, array) {
forEach(array, function (element) {
base = combine(base, element);
});
return base;
}
function equals(x) {
return function(element) { return x === element;};
}
function count(test, array) {
return reduce(function(base, element) {
return base + (test(element)?1:0);
}, 0, array);
}
function countHelper(test, array) {
function helper(base, element) {
return base + (test(element)?1:0); …Run Code Online (Sandbox Code Playgroud) 我目前正在阅读"真实世界Haskell",并对其中实现的一个功能感到困惑:
parseP5_take2 :: L.ByteString -> Maybe (Greymap, L.ByteString)
parseP5_take2 s =
matchHeader (L8.pack "P5") s >>?
\s -> skipSpace ((), s) >>?
(getNat . snd) >>?
skipSpace >>?
\(width, s) -> getNat s >>?
skipSpace >>?
\(height, s) -> getNat s >>?
\(maxGrey, s) -> getBytes 1 s >>?
(getBytes (width * height) . snd) >>?
\(bitmap, s) -> Just (Greymap width height maxGrey bitmap, s)
Run Code Online (Sandbox Code Playgroud)
我无法得到的是width,height和其他人如何从匿名函数范围泄露并在最新的表达式中可用.
RWH的确切位置:http://book.realworldhaskell.org/read/code-case-study-parsing-a-binary-data-format.html#id624895
简化的自己的代码失败了,因为我期望:
Prelude> (\x -> x) …Run Code Online (Sandbox Code Playgroud) 我一再想要应用一个函数,使用过去的输出作为新输入.为了便于阅读(我从数学的角度来看,而不是程序员的观点),我想将它定义为一个简单的匿名函数而不是一个完整的函数块.所以,而不是像
function f=myfun(x,n)
if n>1
f=myfun(myfun(x,n-1),1);
else
f=expression(x);
end
end
Run Code Online (Sandbox Code Playgroud)
我想能写
f=@(x,n) ????
Run Code Online (Sandbox Code Playgroud)
这有可能吗?
我希望能够以编程方式更改匿名函数,例如通过将所有加号更改为函数中的乘法符号.在许多情况下,此示例可以按如下方式完成:
function f2 = changefunction(f1)
fs = func2str(f1);
fs(fs=='+') = '*';
f2 = str2func(fs);
end
Run Code Online (Sandbox Code Playgroud)
但请考虑这个例子
f = @(x) x+5;
a = 5;
g = @(x) x+a;
Run Code Online (Sandbox Code Playgroud)
双方f并g会匿名函数,增加了5,无论你塞了进去; 但是只有功能f才能正确更改changefunction,而g将被更改为任何输入都会出错的功能.
所以我的问题是是否可以从函数句柄中提取工作区并将其保留在创建的新函数句柄中?我需要以编程方式进行,最好不使用内置函数functions!