I am calling a function on button click like this:
function outer[] {
alert["hi"];
}
It works fine and I get an alert:
Now when I do like this:
function outer[] {
function inner[] {
alert["hi"];
}
}
Why don't I get an alert?
Though inner function has a scope available in outer function.
asked Nov 4, 2012 at 12:22
1
You could make it into a module and expose your inner function by returning it in an Object.
function outer[] {
function inner[] {
console.log["hi"];
}
return {
inner: inner
};
}
var foo = outer[];
foo.inner[];
answered Dec 18, 2015 at 21:29
Matt HolmesMatt Holmes
8298 silver badges6 bronze badges
3
The scoping is correct as you've noted. However, you are not calling the inner
function anywhere.
You can do either:
function outer[] {
// when you define it this way, the inner function will be accessible only from
// inside the outer function
function inner[] {
alert["hi"];
}
inner[]; // call it
}
Or
function outer[] {
this.inner = function[] {
alert["hi"];
}
}
answered Nov 4, 2012 at 12:23
techfoobartechfoobar
64.2k14 gold badges113 silver badges130 bronze badges
3
You are not calling the function inner
, just defining it.
function outer[] {
function inner[] {
alert["hi"];
}
inner[]; //Call the inner function
}
answered Nov 4, 2012 at 12:23
EsailijaEsailija
136k23 gold badges266 silver badges319 bronze badges
You can also try this.Here you are returning the function "inside" and invoking with the second set of parenthesis.
function outer[] {
return [function inside[]{
console.log["Inside inside function"];
}];
}
outer[][];
Or
function outer2[] {
let inside = function inside[]{
console.log["Inside inside"];
};
return inside;
}
outer2[][];
answered Nov 17, 2017 at 11:15
TharzeezTharzeez
1,18514 silver badges15 bronze badges
Again, not a direct answer to the question, but was led here by a web search. Ended up exposing the inner function without using return, etc. by simply assigning it to a global variable.
var fname;
function outer[] {
function inner[] {
console.log["hi"];
}
fname = inner;
}
Now just
fname[];
answered Feb 23, 2021 at 8:20
rshawrshaw
913 bronze badges
If you want to call the "inner" function with the "outer" function, you can do this:
function outer[] {
function inner[] {
alert["hi"];
}
return { inner };
}
And on " title" event you call the function like this:
answered Apr 17, 2020 at 19:27
you can also just use return:
function outer[] {
function inner[] {
alert["hi"];
}
return inner[];
}
outer[];
answered Oct 8, 2020 at 5:58
function outer[] {
function inner[] {
alert["hi"];
}
inner[];
}
you should try this
answered Oct 8, 2021 at 5:51
fazalfazal
236 bronze badges
1
In JavaScript
If using ES6
static
functions can be used in a class
If using ES5
After several days of usage, below is what I came up with,
it is minimal & also has a lot of
conveniences:
function MathFunctions[] {
let thefo = {}; // the functions object
thefo.sum = sum = [a, b] => {
return a + b;
};
thefo.avg = avg = [a, b] => { // name is repeated 2 times - minor inconvenience
return sum[a, b] / 2; // calls sum, another function without using 'this'
};
return thefo; // no need to go down & export here always for each new function - major convenience
}
// Usage
console.log[MathFunctions[].sum[1, 2]];
console.log[MathFunctions[].avg[1, 2]];
// OR
const mf = MathFunctions[];
console.log[mf.sum[1, 2]];
console.log[mf.avg[1, 2]];
answered Jan 13 at 2:57
Try This Solution
const greet = [greeting] => {
return function [name] {
console.log[`${greeting} ${name}`];
};
};
greet['Hi !']['JAHID'];
function parent[] {
this.child1 = function child1[string]{
console.log[string];
}
this.child2 = function child2[string]{
console.log[string];
}
}
new parent[].child1["hello world child1"];
new parent[].child2["hello world child2"];
Output:
"hello world child1"
"hello world child2"
answered Apr 5 at 16:15