ЯШ: При создании замыкания, как внутренняя функция получает доступ к аргументу внешней функции, если я не храню ее как переменную? - PullRequest
0 голосов
/ 18 января 2019

Я не знаю, как эти замыкания 2 выполняют одно и то же.Я понимаю, как будет работать пример 1, приведенный ниже, поскольку переменная foo хранит значение аргумента, но я не могу понять, что удаление переменной в примере 2 и простой доступ к внешнему аргументу непосредственно из внутренней функции, какэто имеет какое-либо отношение к этому?

//ex1:
function firstex1(x) {

	   let foo = x;
   	   console.log(foo)
     
	   function second() {
	   	return foo + 100
		
       }

	   return second
    }

console.log("Example 1:  "+ firstex1(1)());
//ex:2 


    function firstex2(x) {
	
   	   console.log(x)
     
	   function second() {
	   	return x + 100
		
       }

	   return second
    }
console.log("Example 2:  "+ firstex2(1)());

1 Ответ

0 голосов
/ 18 января 2019

В примере 2 аргумент x передается внешней функции.Внутри внешней функции каждый объект имеет доступ к x, поскольку его область действия покрыта полным блоком кода этой функции.Когда внутренняя функция пытается получить доступ к этому x, она может сделать это легко, поскольку у нее есть доступ к этой области, поскольку она сама присутствует в этой области.Это как когда вы объявляете глобальную переменную и пытаетесь получить к ней доступ внутри функции.Функция имеет доступ ко всем глобальным переменным.

    var count=0;
    function a()
    {
    console.log(count++)
    }
    
    a();

Приведенное выше вернет количество + 1, и так же будет

 function first(x) {
    
       console.log(x)
    
       function second() {
        return x + 100
    
       }
    
       return second
    }
    
    console.log(first(1)());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...