Tag: 作用域

为什么这个JavaScript函数失去封闭范围?

我在node.js中运行这个 为什么下面的代码段会丢失cb var的作用域? Client.prototype.post = function(path, data, callback) { var self = this; var cb = callback; return function() { console.log(path); console.log(cb); rest.post(self.baseUrl + path, data).on('complete', cb || this.callback); } }; 对这个函数的调用如下所示: client.post('/user', {}, function() {}); 并输出以下内容: /user undefined 我期待的第二行是[Function]返回的函数可能是执行任何js的.apply()或.apply()方法来改变它的运行范围。但我认为cb将是就像path一样。 更新:在函数中包装callback使其工作。 但是我仍然想要解释一下这里发生的事情。 var cb = function() { callback(); };

这是NodeJS中的一个variables范围问题,还是我需要更多的睡眠?

在一个NodeJS项目上,我遇到了一个非常意想不到的行为,我无法解决这个问题 – 这对我来说似乎是一个bug,但也许我只是误解了NodeJS模块的运行方式。 我把它缩减为一个testing用例如下: mod.js模块 exports.process = function(obj){obj.two ='two'; }; test.js文件 var testObj = {one:'one'}; console.log(['Before:',testObj]); var cachedObj = testObj; 。要求( './ MOD')处理(cachedObj); console.log(['After:',testObj]); 然后运行$ node test.js给我这个: ['Before:',{one:'one'}] ['After:',{one:'one',two:'two'}] 我将testObj的值testObj cachedObj ,而testObj永远不会传递给模块方法。 testObj应该(据我所知) 永远不会被修改。 事实上, cachedObj肯定不会被修改,因为它从来没有从mod.process方法返回。 我哪里错了? (运行节点0.6.9)

Node.js是否支持let关键字?

在Javascript 1.7中, let关键字引入了块范围。 这可以说是Javascript最需要的function,我想知道如果Node.js支持它。 我的部分难点在于确定Node是否运行Google的V8引擎,它来自这样和那样的标准,我不知道这些是如何与Javascript xy版本号alignment的。

与EJS斗争和不是所谓“本地”变数的范围

我想知道如何使用EJS模板来编写我的node.js应用程序。 实际上,我正在寻找一种合适的方法来在局部/模板中使用默认值来定义局部variables。 我现在很快就会发现它的作用: 当我打电话给一个模板,像这样: <%- partial(__view.partialPath('tagPopover'), { title_popover: sentence.nickname, content_tag: '#' + sentence.nickname, icon_popover: 'http://placehold.it/64×64' }) %> 我用_tagPopover.ejs部分pipe理默认值: title_popover = typeof title_popover != 'undefined' ? title_popover : '' classes_tag = typeof classes_tag != 'undefined' ? classes_tag : 'tags' icon_popover = typeof icon_popover != 'undefined' ? icon_popover : false content_tag = typeof content_tag != 'undefined' ? […]

应用程序不改变范围

我想使用JavaScript .apply方法来编译Node.js节点的函数。 thrift .js文件的代码如下所示: … var NimbusClient = exports.Client = function(output, pClass) { this.output = output; this.pClass = pClass; this.seqid = 0; this._reqs = {}; }; NimbusClient.prototype = {}; NimbusClient.prototype.getClusterInfo = function(callback) { this.seqid += 1; // line where error is thrown [0] this._reqs[this.seqid] = callback; this.send_getClusterInfo(); }; … 我的服务器文件看起来如下所示: var thrift = require('thrift') , […]

node.jscallback获取variables的意外值

我有一个for循环,里面有一个variables赋值为var。 在循环内部也调用一个需要callback的方法。 在callback函数里我使用了循环中的variables。 我期望它的价值,在callback函数内,将是相同的,因为它是在该循环迭代期间的callback。 然而,它总是似乎是循环的最后一次迭代的价值。 我误解了JavaScript的范围,还是有其他的错误? 这里讨论的程序是一个node.js应用程序,它将监视工作目录的更改,并在find服务器时重新启动服务器。 我将包括所有好奇的代码,但重要的是parse_file_list函数。 var posix = require('posix'); var sys = require('sys'); var server; var child_js_file = process.ARGV[2]; var current_dir = __filename.split('/'); current_dir = current_dir.slice(0, current_dir.length-1).join('/'); var start_server = function(){ server = process.createChildProcess('node', [child_js_file]); server.addListener("output", function(data){sys.puts(data);}); }; var restart_server = function(){ sys.puts('change discovered, restarting server'); server.close(); start_server(); }; var parse_file_list = […]

express.js中的中间件function的范围

我正在学习express.js / node.js,并对JavaScript原型模型有一个很好但不是很好的理解。 因此,我对中间件可以用express.js的路由机制进行堆叠的方式感到困惑。 说我们有这个代码 function andRestrictTo(role) { return function(req, res, next) { req.authenticatedUser.role == role ? next() : next(new Error('Unauthorized')); } } app.del('/user/:id', loadUser, andRestrictTo('admin'), function(req, res){ res.send('Deleted user ' + req.user.name); }); 由于和RestrictTo(angular色)返回一个中间件,它得到在路由链中执行 – 我明白了。 然而: req,res,next参数在返回函数中来自哪里? 我想这个“连锁店”是排队的,并且对参数进行了调整,但是对于更深入的理解,这有些太模糊了。 作为下一个参数引发的错误发生了什么? 错误是否会破坏中间件链? 如果我想将限制机制打包到一个单独的文件/模块(如安全框架),那将如何完成? 这将是很酷,如果有人可以指出基本的想法:)

Node.js和客户端共享相同的脚本

使用Node.js的一个理论好处是可以在客户端和服务器之间共享相同的脚本。 如果客户端不支持JavaScript,那么这将使服务器可以降低相同的function。 然而,Node.js require()方法是自己的。 在你加载的脚本中,你可以添加一些东西到this或者exports ,稍后在获取脚本的对象中可用: var stuff = require('stuff'); stuff.show(); 在stuff.js中: this.show = function() { return 'here is my stuff'; } 所以,在客户端重新使用这个脚本时, .show()方法将被添加到window范围中。 这不是我们想要的,而是我们想将其添加到自定义名称空间。 到目前为止,我唯一的解决scheme就像(在stuff.js中): var ns = typeof exports == 'undefined' ? (function() { return window['stuff'] = {}; })() : exports; ns.show = function() { return 'here is my stuff'; } delete ns; […]

Node.jsvariables声明和范围

当我在node.js中input时,我得到了undefined 。 var testContext = 15; function testFunction() { console.log(this.testContext); } testFunction(); =>undefined 没有var关键字,它通过(=> 15)。 它在Chrome控制台中工作(使用和不使用var关键字)。