为什么定义具有相同名称的本地函数不会覆盖从模块导入的函数

时间:2017-05-16 23:22:13

标签: javascript node.js

为什么具有相同名称的本地函数不会与导入的函数发生冲突或重写,我本来希望本地函数可以覆盖并运行而不是由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;

1 个答案:

答案 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

简而言之,就是如何解释您的代码。如果你想保持所有的实现只是重命名它们,那就不是很漂亮...也要确保你在初始化之前不会执行函数表达式,因为变量会提升但初始化不会。 我希望这是有道理和有帮助的。