1

Hi guys is this posibble? calling a function inside a function inside a requirejs module? TIA

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

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

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

    }
};
 });

4 Answers 4

4

Your code as stated won't work. I suggest changing it to something like this:

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;
});

I personally think this style of code is clean and flexible. It is clear which functions are being exported, and they can reference each other using simple, local variable names.

Sign up to request clarification or add additional context in comments.

2 Comments

thanks @cspotcode. but with this implementation "privateFunc" cannot be called other modules
@koko Also you can use func1, func2 which is the functions returns by themodule. But internally in the module you can use func1, func2
0

Lets split a requireJs module in its part to understand what happens:

Let requireJs know that this is a module

define(

Some dependencies

[ 'common'], 

So this is the main part. After all this just a function that is called when loaded. RequireJs save the result of the function and inject it in every module that has this module as dependencies

function(Common) {
  return

So this is what every module get when it require this module

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

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

    }
  };

So in your case you return just a simple object with to 2 functions as it members.

What you try to do cant work cause there is no func in the scope, aka the function that returns the object. But a there is member func in your object, so you can call this.func1.

You can also have a function in your function like this:

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

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

But then func1 isn't accessible from outside

Comments

0

Inspired on Andreas Köberle answer I found this work-arround, but Im almost sure there are a better way to do that...

define(function(require) {

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

This way we can access from inside and outside the method func1. For me works very well. Thanks.

Comments

-2

The follwing would work...

console.log(this.func1());

You haven't specified the handle correctly, you have to use this to specify the func1 handle. and i think you were about to call func1() to print 'this is function 1' not just do func1 without paranthesis, as it would print the function definition.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.