跨模块功能范围?它在哪里看

时间:2014-03-19 17:25:50

标签: javascript node.js

鉴于以下内容:

include.js

module.exports = function() {

    ...

    return {
        func: function(val) {
            return Function('return ' + val + ';');
        }
    }
}()

running.js

var outer = function() {
    var include = require('./include.js');

    var x = include.func('eq');

    console.log(x(5, 5));
}
outer()

...我会把function eq(x, y){ return x === y; }放在哪里这会有效?我正在调用该函数的行上获得eval at <anonymous>;在这种情况下为x(5,5)。

eq位于include.jsrunning.js时,我不知道这是示例代码是从我的项目中获取并且非常含糊......但是,如果可能的话,那个功能会去哪里?

OR

...定义一个函数对象会更好,其中键是函数的名称吗?

defaultFuncs = {
    'eq': function(x, y){ return x === y; }
}

1 个答案:

答案 0 :(得分:2)

通过new Function创建的父函数范围是全局范围,而不是任何本地或模块范围。所以

global.eq = function(a,b) { return a==b };
function func(name) { return Function("return "+name+";"); }

var x = func("eq");
var equals = x();
equals(5, 5) // true

应该有用。

  

...定义一个函数对象会更好,其中键是函数的名称吗?

肯定是的。