Javascript JS作用域/闭包如何传递参数

Javascript JS作用域/闭包如何传递参数,javascript,scope,closures,Javascript,Scope,Closures,有人能解释为什么在下面的函数中,我能够将参数传递给嵌套函数吗?我的理解是,它必须与闭包和作用域有关(我认为我对闭包和作用域有相当的了解),但我似乎可以理解这个论点到底是如何通过的 以下功能分别输出1,2。但是返回语句doThis()如何获取“a”的参数?我不知道在哪里/如何访问/传递 function doSomething(){ var b = 1; return function doThis(a){ console.log(b);//1 consol

有人能解释为什么在下面的函数中,我能够将参数传递给嵌套函数吗?我的理解是,它必须与闭包和作用域有关(我认为我对闭包和作用域有相当的了解),但我似乎可以理解这个论点到底是如何通过的

以下功能分别输出1,2。但是返回语句doThis()如何获取“a”的参数?我不知道在哪里/如何访问/传递

function doSomething(){
  var b = 1;
  return function doThis(a){
        console.log(b);//1
        console.log(a);//2
  }
}
var exec = doSomething();
exec(2);

函数
doSomething()
在执行时返回另一个函数

var exec = doSomething();
您可以认为
exec
包含以下函数

function doThis(a){ // <- takes an argument
    console.log(1); // comes from the b argument in the outer scope
    console.log(a); // not set yet
}
当您执行
doSomething()
时,返回的结果仍然保留对其中作用域的访问权限,这就是为什么
doThis()
可以访问值
b
-它是可以访问的。这和你能做的很相似

var foo=40;
功能条(值){
返回foo+值;
}

控制台日志(条(2))函数
doSomething()
在执行时返回另一个函数

var exec = doSomething();
您可以认为
exec
包含以下函数

function doThis(a){ // <- takes an argument
    console.log(1); // comes from the b argument in the outer scope
    console.log(a); // not set yet
}
当您执行
doSomething()
时,返回的结果仍然保留对其中作用域的访问权限,这就是为什么
doThis()
可以访问值
b
-它是可以访问的。这和你能做的很相似

var foo=40;
功能条(值){
返回foo+值;
}

控制台日志(条(2))当您分配
var exec=doSomething()时
exec
基本上是在写:

 var doSomething = function(a) {
        console.log(b);
        console.log(a);
  }

它成了它自己的功能。因此,像So
exec(2)
一样传入
2
与任何正常函数一样工作,只是由于闭包,它有变量
b
可用。

当分配
var exec=doSomething()时
exec
基本上是在写:

 var doSomething = function(a) {
        console.log(b);
        console.log(a);
  }
它成了它自己的功能。因此,像So
exec(2)
一样传入
2
与任何正常函数一样工作,只是由于闭包,它具有可用的变量
b