Articles of closures

这个nodejs代码是一个循环引用吗?

它们只是来自node.js官方文档的几行。 client.on('data', function(data) { console.log(data.toString()); client.end(); }); 我认为客户端对象已经引用了callback,callback对客户端对象有一个闭包引用。 那是对的吗? 如果是的话,为什么这是鼓励?

有人可以解释一个函数从howtonode包装成语吗?

我最近开始使用node.js,express&mongodb。 由于快递使用连接提供中间件支持,我开始阅读中间件和连接。 我在howtonode.org上遇到了下面的例子: return function logItHandle(req, res, next) { var writeHead = res.writeHead; // Store the original function counter++; // Log the incoming request console.log("Request " + counter + " " + req.method + " " + req.url); // Wrap writeHead to hook into the exit path through the layers. res.writeHead = function (code, headers) […]

处理node.jscallback的最佳实践

我正在创build一个JavaScript类,并在这个函数中使用了node.js中的encryption模块。 我不确定哪个是最好的方法来处理callback。 看看例子并解释。 Users.prototype.makeSalt = function(callback){ crypto.randomBytes(64, callback); }; 要么 Users.prototype.makeSalt = function(callback){ crypto.randomBytes(64, function(err, buf){ if (err) callback(err); callback(null, buf); }); }; 哪一个是首选方法还是最佳实践? 在第一个中,我将callback直接发送到模块中定义的函数,并让它处理callback。 在第二个我通过接收函数的callback自己处理callback。 我觉得第一个是首选,除非我需要任何定制。 但我在node.js和javascript的技能方面非常新手,所以想知道两种方法之间的区别,哪一个会更好?

尝试遍历一个数组并为每个数组添加一个get函数

我想遍历样式标签,并为每个写一个GET函数。 问题是GET函数正在写入'styleTags [i]'的引用,而不是将'styleTags [i]'转换为适当的标签。 var styleTags = ['cont', 'ecce']; for (var i = 0; i < styleTags.length; i++) { app.get('/photos-' + styleTags[i], selectNav, function(req, res) { getDynPhotos(req, res, styleTags[i]); }); }

如何避免深入嵌套在nodejstesting?

你会介意分享你的testingnodejs的最佳做法吗? 什么是你的经验,以避免深嵌套? 编写testing时,无法弄清楚如何重构这段代码来closures它。 describe('ProcessRawData', function(){ describe('event that has been already handled', function(){ beforeEach(function(done){ store.testMode(true); var filename = __dirname + '/data/test.txt'; fs.readFile(filename, 'utf8', function(err, rawData) { prd.process(rawData, function(err, data){ var rawMsgSha1 = '123464fbcb34c333f4300a88f019f43e7de757d6'; store.sismember('events:handled', rawMsgSha1, function(err, exists){ if (err) throw err; assert.ok(exists); done(); }); }); }); })

Javascript / NodeJS:通过对象似乎覆盖“自我” – closures问题?

我的第一个Stackoverflow问题(我记得)。 经过多年的实践,我正在慢慢地重新开发开发Node和Javascript。 我希望这真的很简单,但我不明白我做错了什么。 我有一个相当简单的JavaScript对象的2个实例。 当我把这个对象的一个​​实例传递给另一个函数的时候,它会掉下来。 我第一次提到一个“自我”的价值很好。 然后我调用传入的对象上的函数。 如果我以后再尝试引用“自我”,看起来“自我”被传入的对象覆盖了。 这是对象来源: "use strict"; //simple object module.exports.SimpleObject = function SimpleObject(inputName) { try{ var self = this; //closure so we don't lose this reference in callbacks self.name = inputName; } catch(err) { console.log('Unable to create SimpleObject: '+err); } SimpleObject.prototype.getName = function() { self = this; return self.name; } SimpleObject.prototype.nestedOverwrite […]

Node.js:asynchronous代码+ jsclosures的麻烦

我无法适应Node的单线程+asynchronous性,再加上javascript的函数闭包。 假设我有这样的东西: function foo(bar) { someAsyncFunction(function callback(err) { // do stuff with 'bar' }); } 请让我知道,如果我失去了一些东西; 但我的理解是: 由于closures, callback会有一个参考 bar 但是,如果在bar = 20时调用foo一次,那么在第一次调用callback 之前再次使用bar = 42 ,那么bar在第一次调用foo callback中将是42。 换一种说法: foo(20) #1 someAsyncFunction(function callback() {}) #1 foo(42) #2 someAsyncFunction(function callback() {}) #2 callback() #1 ——->使用bar = 42 callback() #2 ——->使用bar = 42 我纠正这个吗? (如果bar是原始对象还是对象,这是否重要?)。 如果是这样,我可以做些什么来确保callback使用正确的值的bar (ASIDE从传递bar一直向下和调用堆栈)? […]

node.js:循环中的闭包

我无法得到closures的挂钩。 一个非常简单的例子: var array = [1,2,3]; var test = [0,0]; var result = []; for (var i=1; i<=array.length; i++){ test[1] = i; result.push(test); } console.log(result); 如果我只是把“我”推到结果中,它输出“1,2,3”,但上面的方法总是得到“[0,3],[0,3] [0,3]”。 这是为什么? 我已经阅读了关于闭包的一些解释,但是我似乎不理解这个系统,这使得我很难在代码中发现更多的错误。 是不是有一个更简单的方法来解决上面的问题,而不是使用函数内的函数(这似乎是解决我所发现的每一个相同的问题)?

是否有可能得到一个需要的文件不同的范围?

假设我有这个名为import.js的示例文件 var self; function Test(a,b){ this.a = a; this.b = b; self = this; } Test.prototype.run = function(){ console.log(self.a, self.b) } module.exports = Test 当我需要这个文件并创build一个新的“对象”时,所有的东西都可以正常工作,但是当我创build第二个对象时,它们都可以访问自己,只有后者才能工作。 var Test = require('./import.js'); var one = new Test(1,2); one.run() 1 2 var two = new Test(3,4); two.run() 3 4 one.run() 3 4 有没有办法重新需要文件,使其创build单独的范围? 把它作为两个不同的variables是行不通的, var Test1 = require('./import') var […]

困惑于一个Javascriptclosures的情况

我正在使用node-mongodb驱动程序编写一些node.js代码。 我决定caching集合对象,当我得到他们这样的: var db = connectionObject; function getCollection(collectionName) { return function(callback) { var cache; if (cache) return callback(null, cache); db.collection(collectionName, function(err, collection) { return err ? callback(err) : callback(null, cache = collection); }); } } var usersCollection = getCollection('users'); usersCollection(function(err, collection) { collection.find({}); // Rest of code here … }); usersCollection函数的重复调用应该使用caching的集合对象,不同之处在于cachingvariables总是未定义的。 更改代码来解决这个问题: return function(callback) { […]