Tag: closures

Google Closure Library提供的jQuery是什么?

考虑到 商业背景 社区支持 可用的扩展 默认的function集 简单的使用 和可靠性 你为什么比另一个更喜欢一个?

JavaScript在运行时如何表示闭包和范围

这大部分是出于好奇的问题。 考虑以下function var closure ; function f0() { var x = new BigObject() ; var y = 0 ; closure = function(){ return 7; } ; } function f1() { var x = BigObject() ; closure = (function(y) { return function(){return y++;} ; })(0) ; } function f2() { var x = BigObject() ; var […]

封闭如何在幕后工作? (C#)

我觉得我对闭包有一个相当好的理解,如何使用它们,什么时候可以有用。 但是我不明白的是他们是如何在记忆中幕后工作的。 一些示例代码: public Action Counter() { int count = 0; Action counter = () => { count++; }; return counter; } 通常情况下,如果{count}没有被闭包捕获,它的生命周期将被限制在Counter()方法中,并且在它完成之后,它将消失Counter()的其余堆栈分配。 当它被closures时会发生什么? Counter()这个调用的整个堆栈分配是否存在? 它是否将{count}复制到堆中? 它从来没有真的被分配到堆栈上,但被编译器认为是closures的,因此总是在堆上? 对于这个特定的问题,我主要关心的是如何在C#中工作,但不会反对支持闭包的其他语言进行比较。

PHP 5.4 – “closures$这个支持”

我看到,PHP 5.4的新计划function是:traits,数组解引用,JsonSerializable接口以及被称为“ closure $this support ” http://en.wikipedia.org/wiki/Php#Release_history 虽然其他人要么立即清除(JsonSerialiable,数组解引用),或者我查了具体(特质),我不知道什么'这个支持'是'封闭'。 我一直没有成功googling或在php.netfind任何关于它 有人知道这应该是什么? 如果我不得不猜测,这将意味着这样的事情: $a = 10; $b = 'strrrring'; //'old' way, PHP 5.3.x $myClosure = function($x) use($a,$b) { if (strlen($x) <= $a) return $x; else return $b; }; //'new' way with closure $this for PHP 5.4 $myNewClosure = function($x) use($a as $lengthCap,$b as $alternative) { if(strlen($x) <= […]

Swift Closure中的返回types必须是Void的可选链接

我正在创build一个应该有自己的run()实现的脚本的双向链接列表( MSScript run() ,并且在他们准备好时调用下一个脚本( rscript )。 我想创build的一个脚本只是一个延迟。 它看起来像这样: class DelayScript : MSScript { var delay = 0.0 override func run() { let delay = self.delay * Double(NSEC_PER_SEC) let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay)) let weakSelf = self dispatch_after(time, dispatch_get_main_queue()) { weakSelf.rscript?.run() Void.self } } init(delay: Double) { super.init() self.delay = delay } } rscript是下一个要运行的脚本。 问题是,如果我删除dispatch_after的最后一行,它不会编译,这是因为从可选链接run()更改返回types 。 […]

实例方法引用和Lambda参数

我无法理解方法引用的语法,其中有两个参数a和b ,引用是b上的一个方法。 例如,我明白如何 Arrays.sort(personArray, comparators::compareByName); 相当于 Arrays.sort(personArray, (o1, o2) -> comparators.compareByName(o1, o2)); 因为在这种情况下,lambda参数匹配方法调用参数(o1, o2) 。 如何为这个lambda stream.sorted((o1, o2) -> o1.compareToIgnoreCase(o2)); 我的IDE告诉我这相当于: stream.sorted(String::compareToIgnoreCase); 我没有find一个规则来replace语法: a.method(b)与方法引用。 例如,如果lambda有三个或更多的参数呢? 这是合法吗? 第一个参数是否成为方法目标,剩下的成为参数?

Javascriptclosures – variables范围的问题

我正在阅读closuresMozilla开发者网站,我注意到在他们的例子中常见的错误,他们有这样的代码: <p id="help">Helpful notes will appear here</p> <p>E-mail: <input type="text" id="email" name="email"></p> <p>Name: <input type="text" id="name" name="name"></p> <p>Age: <input type="text" id="age" name="age"></p> 和 function showHelp(help) { document.getElementById('help').innerHTML = help; } function setupHelp() { var helpText = [ {'id': 'email', 'help': 'Your e-mail address'}, {'id': 'name', 'help': 'Your full name'}, {'id': 'age', 'help': 'Your age (you […]

将值传递给onclick

如果我使用循环创build大量的HTML元素,比如 for (i= 1; i < 100; i++) { var my_element = document.createElement ("td"); row.appendChild (my_element); my_element.onclick = function () {my_function (i)); } 那么当单击元素时,传递给my_function值始终为100,而不pipe数字元素是否调用它。 我通过使用已经解决了这个问题 my_element.id = "something"+i; my_element.onclick = function (e) {my_function (e.target.id)}; (对于Internet Explorer,显然target需要是srcElement 。)我很想知道是否有任何方法来创build函数,而不必将ID添加到像这样的元素。

从lapply返回匿名函数 – 出了什么问题?

当试图使用lapply创build一个类似函数的列表时,我发现列表中的所有函数都是相同的,并等于最终的元素应该是什么。 考虑以下几点: pow <- function(x,y) x^y pl <- lapply(1:3,function(y) function(x) pow(x,y)) pl [[1]] function (x) pow(x, y) <environment: 0x09ccd5f8> [[2]] function (x) pow(x, y) <environment: 0x09ccd6bc> [[3]] function (x) pow(x, y) <environment: 0x09ccd780> 当您尝试评估这些function时,您会得到相同的结果: pl[[1]](2) [1] 8 pl[[2]](2) [1] 8 pl[[3]](2) [1] 8 这里发生了什么,我怎样才能得到我想要的结果(列表中的正确function)?

JavaScript真的是全球性的吗?

在浏览器中使用这段JavaScript: <script> console.log(window.someThing); var x = 12; function foo() { window.otherThing = x; } </script> 我们可以进入window ,我们都知道,但为什么呢? 这是一种特殊的全局variables吗? 还是“根范围”(在script标签内)有它作为一个隐式的局部variables,它是简单的“闭包inheritance”,因为任何其他局部variables(如上面的x )可以是? 那么如何才能将script标签中直接声明的variables设置为window属性呢? (或者不是这样?) <script> var x = 12; function() { console.log(window.x); } </script>