函数范围问题-函数未定义
Issue with function scope - function is undefined
我正在使用NodeJS构建的应用程序中工作。我正在使用模块,这是我迄今为止的代码:
代码:PROGRAM.JS
var path = process.argv[2];
var ext = '.' + process.argv[3];
var prsFiles = require('./fpmod');
function callback(err, files) {
if(!err) {
success(ext, files);
} else {
throw ('uhoh there was an error! :/');
}
}
prsFiles.process(path, ext, callback);
代码:FPMOD.JS
var fs = require('fs');
var pathMod = require('path');
var i = 0;
function success(ext, files) {
for(i; i < files.length; i++) {
// console.log('File comes in as: ' + files[i] + ' and we''re filtering on .' + ext);
var currentFile = files[i];
var currentFileExt = pathMod.extname(currentFile);
// console.log('grabbed ext is: ' + currentFileExt);
if(ext) {
if(ext === currentFileExt) {
console.log(currentFile);
}
} else {
console.log(currentFile);
}
}
}
function processFiles(path, ext, callback) {
var success = success;
fs.readdir(path, callback);
}
exports.process = processFiles;
我得到的错误表明没有定义成功函数。为什么?如果我对函数范围的理解是正确的,那么它应该可以访问成功函数!我做错了什么?
JavaScript中的作用域是词法的。重要的是在定义函数时,函数中代码可见的符号集。我想更准确的说法是,在定义点上,重要的是作用域的集合。函数作用域(delete
除外,这很奇怪,在严格模式下是不允许的)就其导出的符号集而言是不可变的,但全局作用域不是。模块作用域的工作原理类似于函数作用域(我认为;我承认自己不是节点专家。)然而,全局作用域在这里并不是真正的问题,因为您使用的是模块。
在主模块中定义的"回调"函数在定义时不能访问名为"成功"的符号。另一个模块中的函数有一个名为"success"的本地符号,这一事实于事无补——该符号与"callback"函数完全不同。这不是用JavaScript可以做到的。
请记住,在Node环境中,模块中未导出的符号实际上是该模块的私有符号。
您没有导出success
函数。
您希望它出现在第一个片段中,即使您没有采取任何措施使其可用。你可以这样做:
module.exports = {
processFiles: processFiles,
success: success
};
然后使用
var prsFiles = require('./fpmod');
function callback(err, files) {
if(!err) {
prsFiles.success(ext, files);
} else {
throw ('uhoh there was an error! :/');
}
}
相关文章:
- 现有函数未定义
- jQuery$.post可以在chrome、safari中工作,但不能在FF中工作(声明成功回调函数未定义)
- AngularJS ng repeat显示原型函数未定义
- jQuery onclick 函数:未定义不是一个函数
- 函数未定义
- 为什么在jsfiddle中显示ReferenceError:函数未定义
- 函数未定义,实际定义时为
- 函数未定义的Javascript(Basic)
- ajax函数未定义
- 为什么window.onload函数未定义
- 模块模式:函数未定义
- 包含的javascript源代码通过PHP,onmousemove事件,函数未定义
- 单击链接时出现函数未定义错误
- AngularJS和Angular Snap:SSnap构造函数未定义
- 在Node.js中,从同一文件中的另一个函数引用一个函数会导致'ReferenceError:-函数-未定义
- symfony trick javascript函数未定义
- 不断获取JS函数未定义错误
- AngularJS HTTP 资源 - 响应函数未定义
- 函数未定义,参数格式
- JavaScript 中的函数未定义