为什么具有相同名称的本地函数不会与导入的函数发生冲突或重写,我本来希望本地函数可以覆盖并运行而不是由require导入的函数。
//Contents of app.js
var greet = require('./greet.js');
//local greet function, how do I call this one? And why does this not redefine the identifier greet
function greet() {
console.log('hi');
}
greet(); //Call greet in module
//Smashing the modules import of greet
var greet = function () {
console.log("Hello pal!");
}
greet();
,另一个文件是greet.js
var greet = function () {
console.log("Hello from module!");
}
module.exports = greet;
答案 0 :(得分:1)
你所拥有的是竞争条件,函数声明与函数表达式的问题可以编译你的代码。
function greet () {...}
var greet = undefined; // reassigning greet
greet = require('...'); // reassigning greet
greet(); // ---> imported greet function execution
greet = function(){...} // ---> new implementation
greet(); // ---> new implementation execution
简而言之,就是如何解释您的代码。如果你想保持所有的实现只是重命名它们,那就不是很漂亮...也要确保你在初始化之前不会执行函数表达式,因为变量会提升但初始化不会。 我希望这是有道理和有帮助的。