Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function “构建”的操作顺序是什么;词汇环境;功能外和;闭包;?_Function_Closures_Environment_Callstack_Nested Function - Fatal编程技术网

Function “构建”的操作顺序是什么;词汇环境;功能外和;闭包;?

Function “构建”的操作顺序是什么;词汇环境;功能外和;闭包;?,function,closures,environment,callstack,nested-function,Function,Closures,Environment,Callstack,Nested Function,这是一个对 下面是一些madeup代码,演示了2个模块和一些嵌套函数调用 //模块_1.js //全局变量 变量常数=6541 功能添加(a、b){ 返回常数+a+b } 职能分包(a、b){ 返回常数-a-b } 功能mul(a,b){ 返回常数*a*b } //模块2.js //全局变量 变量a=11 var b=5 变量c=2 main() 函数main(){ var v=foo_1() var w=foo_2() var t=v(1,2,3) var u=w(4) var k=相加(t

这是一个对

下面是一些madeup代码,演示了2个模块和一些嵌套函数调用

//模块_1.js
//全局变量
变量常数=6541
功能添加(a、b){
返回常数+a+b
}
职能分包(a、b){
返回常数-a-b
}
功能mul(a,b){
返回常数*a*b
}
//模块2.js
//全局变量
变量a=11
var b=5
变量c=2
main()
函数main(){
var v=foo_1()
var w=foo_2()
var t=v(1,2,3)
var u=w(4)
var k=相加(t,u)
//输出
console.log(k)
//嵌套函数
函数foo_1(){
var d=bar_1(2,3)
变量e=巴2(10)
//将函数作为结果返回。
返回杆3
//超级嵌套函数。
功能条_1(x,y){
var m=mul(x,a)
var n=sub(m,y)
var o=mul(n,c)
返回o
}
功能条_2(x){
var m=mul(x,x)
变量n=加(m,3)
var o=mul(n,a)
返回n
}
功能条_3(x,y,z){
var m=mul(x,a)
var n=sub(m,y)
var o=添加(n,b)
var p=mul(o,z)
var q=sub(p,c)
var r=mul(q,d)
var s=加(r,e)
返回s
}
}
函数foo_2(){
返回杆2
功能条_1(x,y){
var p=加(y,a)
var q=加(x,p)
返回q
}
功能条_2(x){
var p=bar_1(x,2)
var q=bar_1(x,4)
var r=mul(p,a)
var s=加(q,c)
返回r*s
}
}

}
您希望创建哪种类型的闭包?Javascript变量闭包还是Javascript let闭包?Python还是Lua?Lisp还是Scheme?(显然,你的闭包超出了它们创建的范围,所以我们至少可以消除Pascal和C++ [& lambdas)。很难在不知道你希望实现的语义的情况下一般地回答这个问题。(JS风格的“环境”只适用于一些闭包实现。)在注释不清楚的情况下,考虑<代码>函数f(n){a= ARRAY()之间的差异;(var i=0;ii);返回a;} < /代码>和非常相似的<代码>函数g(n){a= ARRAY();(让i=0;ii);返回a;}< /> >;唯一的区别是
var
let
。但是关闭是非常不同的。对比度
f(3)[0]()
g(3)[0]()
。现在,哪一个是Python?尝试
f=lambda n:[lambda:i表示范围(n)内的i)]