返回函数Chrome开发工具
Returning a function Chrome Dev tools
这个问题可能在其他地方得到答案,但我甚至不知道如何开始寻找答案。我是JavaScript的新手,所以这一点我很难理解。
给定以下代码:
function multiple(n) {
function f(x) {
return x * n;
}
return f;
}
var triple = multiple(3);
var quadruple = multiple(4);
当我将以下内容传入控制台时:
console.log(triple(5));
我得到了我所期望的,那就是15。同样,对于任何数字,它都会增加三倍(如果我使用第二个函数,则会增加四倍)。
但当我在控制台中键入三重时,我会得到以下代码:
f(x) {
return x * n;
}
控制台不应该返回吗。。。
f(x) {
return x * 3;
}
由于3是通过以下代码编码到函数中的:
var triple = multiple(3);
3
不是硬编码到函数中。f
的代码指的是变量n
,而不是数字3
。在你的代码中,碰巧没有办法修改n
,但想象一下一些代码中是修改n
:的方法
function multiple(n) {
function f(x) {
return x * n;
}
function modifyN(newN) {
n = newN;
}
return { f: f, modifyN: modifyN };
}
var resultFor3 = multiple(3);
var triple = resultFor3.f;
var modifyTripleN = resultFor3.modifyN;
正如您所看到的,n
不是硬编码的;它与其他变量没有什么不同。在您的特定示例中,在multiple
终止后无法修改n
,但这不会使调用multiple
创建的闭包内的值以任何方式"硬编码"。
键入triple
只需显示函数的源代码。
由于3是通过以下代码编码到函数中的
这是一个错误的说法。您没有更改函数的源代码。要更改源代码,您必须重新定义整个函数。你所要做的就是传递一个参数。控制台正在为您提供正确的输出。
当你在高级上向函数传递参数时,在运行时,它只是在寻找存储在该变量(或类似的东西)的内存地址中的任何值。但它并不是在重写函数的源代码。
好吧,这和如果你有的话是一样的
var n = 3;
function f(x) {
return n * x;
}
如果您记录f
,您将看到上面的函数,但当您调用它时,n
将从作用域链中最接近的变量n
获得其值,在我们的例子中是n = 3
,即全局作用域中声明的n
的值。
我不知道JS
引擎在闭包中存储n
变量的确切方式(在您的案例中是multiple
函数创建的闭包),但重要的是,闭包中的变量是由reference
保存的,而不是按值保存的。
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- Chrome开发工具中使用了哪些框架和库
- $.get-response没有responseJSON方法,但当我在Chrome开发工具中绑定它时,它确实有
- 无法在Chrome开发工具中实时编辑Javascript
- 在Chrome开发工具中测量步骤之间的时间
- Redux开发工具Chrome扩展Immutable.js导致错误
- Chrome 开发工具:如何计算加载弹出窗口并将其显示在页面上所需的总时间
- 是否有“”的键盘快捷键;暂停动画”;Chrome开发工具中的功能?(F12)
- 哪个webpack开发工具适合chrome应用程序
- 如何使用Chrome'查看窗口对象中定义了哪些变量;的开发工具
- Chrome在刷新应用程序后30秒以上没有响应(打开了开发工具)
- Chrome开发工具未捕获AJAX请求
- Chrome开发工具命中代码但未命中断点
- 无法在javascript中访问PHP数组,初始化为数组的javascript对象在chrome开发工具中最终为空
- Fetch元素鼠标当前指向的Chrome开发工具已启用
- 在Chrome开发工具中隐藏JavaScript文件
- 使用chrome开发工具在html页面中编辑嵌入式Javascript
- Chrome开发工具:保存javascript状态
- 没有Chrome开发工具,王牌编辑器就不会显示
- 开发工具Chrome与JQuery你可以启用/禁用东西