Reputation: 533
How to change value of x
in function A() from function B()
function A() {
var x = 10; // Value to be changed
function B() {
var x = 20;
// From here i want to change the value of x (i.e. x=10 to x=40)
}
B();
}
A();
Upvotes: 4
Views: 8531
Reputation: 1490
Maybe:
function A() {
var x = 10; // Value to be changed
function B() {
var x = 20;
return x; // Return new value of x
}
x = B(); // Set x to result returned by B(), i.e. the new value
}
A();
Upvotes: 2
Reputation: 96865
Do not use var
when intending to overwrite the variable. Using var
creates a new variable, local to the scope in which it is declared. That's why x
is not changing on the outside.
function A() {
var x = 10;
function B() {
x = 20; // change x from 10 to 20
}
B(); // x is now changed
}
Upvotes: 10
Reputation: 364
the var
statement will create new local variable. So in your example:
function A() {
var x = 10; // You can think of it as A.x
function B() {
var x = 20; // And this as A.B.x
}
}
Those two variables belong to different scope, if you want to access variable of an outer scope from within inner scope just access it, without re-declaring it.
You might want to checkout "JavaScript Language Specifications" document available at http://www.planetpdf.com/codecuts/pdfs/tutorial/jsspec.pdf to understand how scopes, statements and other basics work in JavaScript.
Upvotes: 1
Reputation: 16468
If I understand your question, the following code is a solution:
function A() {
var x = 10; // Value to be changed
function B() {
var x = 20;
// From here i want to change the value of x (i.e. x=10 to x=40)
changeX(40);
}
function changeX(y) {
x = y;
}
B();
alert(x);
}
A();
However there are more elegant approach, but it depends on your application.
Upvotes: 4