javascript - 函数创建者的参数何时在创建的函数中可用?

标签 javascript function debugging

我有这样一个函数创建器:

var creator = function(param) {return function(){
  debugger;
}}

现在,当我创建函数时:

var f = creator(123);

并运行它:

f();

我无法从 Debug模式获取param

在此版本的创建者中:

var creator = function(param) {return function(){
  var param = param;
  debugger;
}}

param 在 Debug模式下是 undefined,但在这种情况下:

var creator = function(param) {return function(){
  var a = param;
  debugger;
}}

aparam 值均等于 123

规则是说创建者的参数何时在创建的函数中可用以及何时不可用?

最佳答案

如果您不创建任何具有重复名称的变量,它们就可用。在第一种情况下,您使用相同的名称(从 root 开始向下),这会覆盖 param。 参数也是变量。我们看看吧。当您传递参数时,请考虑它将像这样声明

function(){
    var param = 123: // 123 is passed.
    return function() {
       ...
    } 
}

然后,当你完成 var param = param 后,它会执行类似这样的操作。

function(){
    var param = 123: // 123 is passed.
    return function() {
       var param; // here you redefine param, which shadows the upper one, so param is now undefined
       param = param;
    }      
}

这就是为什么您会得到具有相同名称的 undefined 和具有不同名称的正确值。

关于javascript - 函数创建者的参数何时在创建的函数中可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42113208/

相关文章:

javascript - If, else if 语句不起作用(仅显示 if)

c# - 在 Visual Studio 2010 中使用扩展对象调试 XSLT

javascript - JavaScript 中匿名函数的removeEventListener

javascript - 全部选中/取消选中,无布局更改 HTML/JavaScript

excel - 如何从 VBA 函数返回结果

JavaScript 函数作用域行为

c++ - 在 C++ 中传递一个字符串

c# - 如何像 DebugView 应用程序一样读取 c# Debug.WriteLine?

c# - 碰撞检测有问题

javascript - 如何将脚本标签附加到由javascript动态生成的div标签