Javascript评估问题
为了准备下一次考试,我正在努力解决我班上课本上的一些问题,但我不知道上面的评估结果如何 大多数情况下,我不理解调用z=g(f),因为当对f求值时,它没有提供参数,那么它是如何求值的呢?它怎么知道y是什么 另外,就作用域而言,我相信javascript将大部分内容都视为全局变量,所以最后设置的x将是函数f中使用的x值,对吗 谢谢你的帮助 请注意,这些是我正在练习准备考试的书后面的额外问题,不是直接的家庭作业问题。Javascript评估问题,javascript,Javascript,为了准备下一次考试,我正在努力解决我班上课本上的一些问题,但我不知道上面的评估结果如何 大多数情况下,我不理解调用z=g(f),因为当对f求值时,它没有提供参数,那么它是如何求值的呢?它怎么知道y是什么 另外,就作用域而言,我相信javascript将大部分内容都视为全局变量,所以最后设置的x将是函数f中使用的x值,对吗 谢谢你的帮助 请注意,这些是我正在练习准备考试的书后面的额外问题,不是直接的家庭作业问题。 全局变量x设置为5 定义了全局函数f,传递的第一个参数别名为y。它返回全局x(10)
- 全局变量
设置为5x
- 定义了全局函数
,传递的第一个参数别名为f
。它返回全局x(10)加y的结果,然后减去2y
- 定义了全局函数
,传递的第一个参数是别名g
。它仅在h
的函数体中定义g
。它返回以x
作为第一个参数传递的x
执行的结果h
被假定为一个函数h
- 表达式
{varx=10;z=g(f)}代码>在全局上下文中执行,因此,
从5重新定义为10x
被分配调用的z
的结果,而g
作为参数传递f
z=g(f)
:
- g被调用
被传递,因此在f
的函数体中,g
变为h
f
是x
所以现在它调用7
并返回它f(7)
- 调用
并返回f
,即15李>(10+7)-2
{var x=10}
覆盖5
var x = 5;
function f(y){ return (x+y)-2 };
function g(h){ var x = 7; return h(x) };
{ var x=10; z=g(f) };
var x = 5;
这将全局x设置为5,然后(在任何函数调用之前)设置为10。大括号不会创建新的作用域
将f
传递到g
函数中(它成为形式参数h
)。然后用x==7
调用(g
是一个具有自己作用域的函数,因此此x
会对全局进行阴影处理)
输入
f
,x
成为形式参数y
<因此,代码>y为7(x+y)-2
是10+7-2
Javascript支持高阶函数,这意味着函数可以作为参数传递到函数中,或者从函数返回。在调用z=g(f)时,根本不计算f。函数f被传递给g,在g中对其求值(作为h)
Javascript不会将所有内容都视为全局变量。Javascript使用静态作用域,这意味着函数使用的全局变量是在定义它的范围内的变量,而不是在调用它的范围内的变量。我理解这是为什么。让我逐行解释一下这里发生了什么:
var x = 5;
function f(y){ return (x+y)-2 };
function g(h){ var x = 7; return h(x) };
{ var x=10; z=g(f) };
你可能已经弄明白了。声明一个新变量x
,并为其赋值5
var x = 5;
function f(y){ return (x+y)-2 };
function g(h){ var x = 7; return h(x) };
{ var x=10; z=g(f) };
var x = 5;
这声明了一个函数,该函数围绕已定义的变量x
关闭。它将此值添加到参数中,然后减去2,返回该值
function f(y){ return (x+y)-2 };
这声明了一个函数,该函数声明一个局部变量x
,然后将其参数作为函数调用,并将x
的值传递给它,该值始终为7
function g(h){ var x = 7; return h(x) };
这将打开一个新的代码块,并声明一个值为10的变量x
。但是,由于此声明与先前的x
(块不会在JavaScript中创建新范围!)声明在同一范围内,因此它实际上会将值10分配给现有变量。然后块调用函数g
,将函数f
作为其参数传入。那么,会发生什么?让我们从调用g
开始:
g
已通过f
。请记住,g
将函数作为参数,因此这是正常的g
将使用参数7
调用f
,并返回其值。现在让我们考虑<代码> f>代码>调用code>f时,y
等于7
,因为这是一个参数x
等于10
,因为原始x
var被赋值为10。因此它将返回(x+y)-2
或(10+7)-2
,即15
因此,脚本执行后,z
的值为15
大多数情况下,我不理解调用z=g(f),因为当对f求值时,它没有提供参数,那么它是如何求值的呢?它怎么知道y是什么
一步一步来
Q:函数g
做什么
A:它将另一个函数作为参数,并使用参数7
调用该函数
function g(h){ var x = 7; return h(x) };
Q:那么g(f)
做什么呢?A:它使用参数
7
调用f
,因此它相当于f(7)
请注意,编写不带括号的f
实际上并不调用f
。在JavaScript中,函数可以像其他变量一样作为参数引用和传递。函数是第一类对象,你可以用它们做更多的事情,而不仅仅是调用它们
Q:f(7)的结果是什么?A:返回语句是
return(x+7)-2
。我们需要知道x
的值
Q:在f
中x
的值是多少?A:
x
这里指的是全局变量x
,其值为10