在requirejs模块javascript中的函数内调用函数

时间:2013-03-08 05:47:00

标签: javascript requirejs

嗨,大家好吗?在requirejs模块内的函数内调用函数? TIA

define([
'common'
], function(Common) {

return {
    func1: function() {
        return 'this is function 1';
    },

    func2 : function (data){
        console.log(func1);

    }
};
 });

4 个答案:

答案 0 :(得分:4)

您说明的代码不起作用。我建议将其更改为:

define([
'common'
], function(Common) {

    var exports = {};

    var func1 = exports.func1 = function() {
        return 'this is function 1';
    };

    var func2 = exports.func2 = function (data){
        console.log(func1);
    };

    // A function that is not exported but can be accessed from other code in this module.
    var privateFunc = function() {
    };

    return exports;
});

我个人认为这种代码风格干净而且灵活。很清楚哪些函数正在导出,并且它们可以使用简单的局部变量名称相互引用。

答案 1 :(得分:0)

让我们分开一个requireJs模块,以了解会发生什么:

让requireJs知道这是一个模块

define(

一些依赖

[ 'common'], 

所以这是主要部分。毕竟这只是一个在加载时被调用的函数。 RequireJs保存函数的结果并将其注入每个具有此模块作为依赖项的模块

function(Common) {
  return

所以这是每个模块在需要这个模块时得到的

{
    func1: function() {
        return 'this is function 1';
    },

    func2 : function (data){
        console.log(func1);

    }
  };

因此,在您的情况下,您只返回一个带有2个函数的简单对象作为成员。

你尝试做什么不能工作,因为范围中没有func,也就是返回对象的函数。 但是您的对象中有成员func,因此您可以调用this.func1

你也可以在你的函数中使用这样的函数:

define([
'common'
], function(Common) {

  function func1() {
    return 'this is function 1';
  }
  return {
    func2 : function (data){
        console.log(func1);
    }
  };
});

但是,func1无法从外部访问

答案 2 :(得分:0)

受到AndreasKöberle回答的启发,我发现这个问题很有用,但我几乎可以肯定有更好的方法可以做到这一点......

define(function(require) {

  function func1() {
    return 'this is function 1';
  }
  return {
    func1: function() {
      return func1();
    },
    func2 : function (data){
        console.log(func1);
    }
  };
});

这样我们就可以从方法func1的内部和外部访问。对我来说效果很好。 感谢。

答案 3 :(得分:-2)

下面的内容会有效......

console.log(this.func1());

您尚未正确指定手柄, 你必须使用this来指定func1句柄。 我想你打算打电话func1()打印'this is function 1' 不只是做func1没有paranthesis,因为它会打印函数定义。