Tag: 作用域

JavaScript / Node.JS中的variables声明和初始化

我在JavaScript中看到了不同的编码格式/样式的build议。 其中之一就是省略, 在每一行的结尾,除非在JSON对象中使用。 另一种是只使用var来声明variables并缩进第二个variables。 我通过了这两个build议,这使我有一个有趣的错误,我想深入了解这个问题。 初始化 var max = 2 arr = [] wait = 10 //Preset arr with simple object {id:i} for(var i = 0; i < max; i++) arr.push({id:i}) 主function function simulate(idIn, callback) { var msg = idIn id = idIn logger.info(idIn, 'simulate', JSON.stringify({id:id, idIn:idIn})) setTimeout(function() { var obj = {id:id, idIn:idIn} logger.info(idIn, […]

JavaScript范围错误函数返回函数

这是我的function的简化版本。 问题是我在警报中都得到两次。 我相信这是一个可变范围的问题,但我似乎无法弄清楚。 var someObj = {"a" : 1, "b" : 2}; function getData(obj){ var bunchOfFunctions = {}; for(var key in obj){ value = obj[key]; bunchOfFunctions[key] = function(){ alert(value); } } return bunchOfFunctions; } var functs = getData(someObj); for(var key in functs){ functs[key](); } 这里是一个jsfiddle.net/earlonrails/q4d66/

Node.js模块级variables是未定义的

我有一个问题访问模块级别variables范围内的一个函数内的模块。 见下文… var socketio = require('socket.io'); var socket = socketio.listen(); var myCustomModule = require('./lib/mycustommodule')('http://mysite:8080'); socket.on('connection', function connection(socket) { socket.emit('message', {data:"test1"}); <====THIS WORKS socket.on('init', function init(data) { socket.emit('message', {data:"test1"}); <====THIS WORKS refreshMyCustomModule(); }); }); var refreshMyCustomModule = function() { socket.emit('message', {data:"test1"}); <=====THIS DOESN'T WORK myCustomModule.beginSomeAsyncTask(function(data) { <======THIS DOESN'T WORK socket.emit('message', {data:"test2"}); <========THIS DOESN'T WORK }); }; […]

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

假设我有这个名为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 […]

摩卡范围function未定义

我目前正在浏览一些使用Javascript的TTD教程,并且有一个似乎是Javascript而不是TTD问题的东西。 即,我有以下testing: 'use strict'; var chai = require('chai'); var expect = chai.expect; var sinon = require('sinon'); var orderSystemWith = require('../lib/orders'); //describe is used to display features //context is used to display scenarios //it is used to describe tests within a feature/scenario describe('Customer displays order', function () { beforeEach(function(){ this.orderDAO = { byId: sinon.stub() }; this.orderSystem […]

节点JSvariables作用域

我有下一段代码 function Server() { function eventHandler(data) { console.log('DATA ' + this.server.socket.remoteAddress + ': ' + data); socket.write('You said "' + data + '"'); } function connectionHandler(socket) { console.log('server connected'); console.log('CONNECTED: ' + socket.remoteAddress +':'+ socket.remotePort); socket.on('data', eventHandler); } this.server = net.createServer(connectionHandler); this.port = undefined; this.startServer = function(port) { //Maybe change backlog for security reasons this.port […]

是否有可能在Mongoose中定义一个default_scope?

在Rails中有default_scope ( http://apidock.com/rails/ActiveRecord/Scoping/Default/ClassMethods/default_scope ),它允许指定一个默认的应用规则集,当从数据库查询模型时。 有没有办法在Mongoose中做同样的事情?

在express / node中使用全局variables

试图find一个解决scheme,我发现了4个解决scheme,但我想知道哪一个更好/最好的做法。 为什么! :P 1.使用req.app.get() // app.js app.set('settings', { domain: 'http://www.example.org' }); // other file console.log(req.app.get('settings')); 2.使用req.app.settings(与上面类似) // app.js app.set('settings', { domain: 'http://www.example.org' }); // other file console.log(req.app.settings.settings); 3.导出应用程序对象,所以我可以访问app.get()没有req对象 // app.js app.set('settings', { domain: 'http://www.example.org' }); module.exports = app; // other file var app = require('../app'); console.log(app.get('settings')); 4.使用全局variables。 可能是个坏主意,但是…不是“设置”是一个全球性的东西吗? (我可以避免重复使用,所以我没有得到范围问题) // app.js settings = { domain: […]

Node.js HTTPcallback中的“this”损失上下文

self.test()不会在self.test()中被触发: App.prototype.createServer = function(){ var self = this; var s = http.createServer(function(req,res){ self.test(); // THIS DOESN`T WORK. req.addListener('end',function(){ res.writeHead(200,{'Content-Type' : 'application/x-javascript'}); self.test(); // THIS DOESN`T WORK. }); }); self.test(); // THIS WORKS. return s; }; App.prototype.test = function() { console.log('test') }; 如果我把它移出http.createServer()它的作品。 为什么是这样? this存储在self应该使它不会丢失的上下文。 我在这里错过了什么? 我可以提供额外的代码和更多的function( self.init等),如果有必要的话。 UPDATE 例如: new App({ port: 8000 }); 初始化: […]

为什么我不能在闭包中访问局部variables

我有以下代码。 我将一些数据保存在并行的callback中的cachingvariables中,但在并行内部,caching对象总是空的。 有任何想法吗? Topics.getTopicsByTids = function(tids, uid, callback) { var cache = {}; function loadTopicInfo(topicData, next) { async.parallel({ privileges: function(next) { console.log(cache); // always prints empty object if (cache[topicData.cid]) { console.log('CACHE'); return next(null, cache[topicData.cid]) } categoryTools.privileges(topicData.cid, uid, next); } }, function(err, topicInfo) { // save privs to cache, doesnt seem to modify //the cache object […]