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
、エクスポートするシンボルのセットに関しては不変ですが(ただし、これは奇妙で、厳密モードでは許可されていません)、グローバルスコープは不変ではありません。モジュールスコープは関数スコープのように機能します(ノードのエキスパートではないことを認めます)。ただし、モジュールを使用しているため、ここではグローバルスコープは実際には問題になりません。
メインモジュールで定義されている「コールバック」関数は、定義された時点で「成功」と呼ばれるシンボルにアクセスできません。他のモジュールの関数に「成功」と呼ばれるローカルシンボルがあるという事実は役に立ちません。そのシンボルは「コールバック」関数とは完全に異質です。これはJavaScriptでできることではありません。
ノード環境では、モジュール内のエクスポートされていないシンボルは事実上そのモジュールにプライベートであることに注意してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加