2015-08-04 3 views
-1

Я пытался понять функции Scope против Gobal Scope с примером ниже:Access Global области видимости внутри вложенной функции Javascript

<script> 
// The following variables are defined in the global scope 
var num1 = 2, 
    num2 = 3, 
    name = "Chamahk"; 

// This function is defined in the global scope 
function multiply() { 
    return num1 * num2; 
} 

console.log(multiply()); // Returns 60 

// A nested function example 
function getScore() { 
    var num1 = 20, 
     num2 = 30; 

    function add() { 
    var num1 = 200, 
     num2 = 300; 
    return name + " scored " + (num1 * num2); 
    } 

    return add(); 
} 

console.log(getScore()); // Returns "Chamahk scored 60000" 
</script> 

Я гуглом и нашел, что переменный Global Scoped можно получить с помощью этого. изменяя код возврата

return name + " scored " + (this.num1 * this.num2); 

дал выход, как «Chamahk набрал 6», значит, это доступ к глобальной переменной num1 и num2.

Это понятно, но что я хотел знать, как получить доступ к num1 и num2, объявленным в функции getScore() .i.e. чтобы получить выход как 600.

ответ

0

Я должен сказать, что ваш вопрос немного запутан.

Как правило, вы хотели бы использовать параметры для своих функций, чтобы передавать значения вокруг.

Причина вы получаете 60000, потому что в вашей функции добавления вы настраиваете num1 и num2 200 и 300.

Если вы изменили функцию добавления взять num1 и num2 в качестве параметров, а не переопределите их, вы можете передать свои значения в getScore();

e.g return add (num1, num2);

<script> 
// The following variables are defined in the global scope 
var num1 = 2, 
    num2 = 3, 
    name = "Chamahk"; 

// This function is defined in the global scope 
function multiply(num1, num2) { 
    return num1 * num2; 
} 

console.log(multiply(num1, num2)); // Returns 6!!! 

// A nested function example 
function getScore() { 
    var num1 = 20, 
     num2 = 30; 

    function add(num1, num2) { 
    return name + " scored " + (num1 * num2); 
    } 

    return add(num1, num2); 
} 

console.log(getScore()); // Returns "Chamahk scored 60000" 
</script> 
+0

Правда, я бы сделал то же самое в сценарии проекта, вот что я хочу понять, как работает функция/глобальная область в случае вложенных функций. –

+0

для случая параметров я думаю, что цепочка сама позаботится о ней, не нужно передавать параметры function getScore() { var num1 = 20, num2 = 30; функция добавить() { имя возврата + "забил" + (num1 * num2); } return add(); } –

Смежные вопросы