Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.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
在javascript中将函数分配给变量时识别变量_Javascript_Function_Closures - Fatal编程技术网

在javascript中将函数分配给变量时识别变量

在javascript中将函数分配给变量时识别变量,javascript,function,closures,Javascript,Function,Closures,在我的jQuery脚本中,当用户用动画关闭菜单时,我必须在关闭动画完成后调用函数。我想通过调用带有参数的函数openStrip()来动态分配此函数。我的代码如下所示: var FUNCTION_JUST_AFTER_MENU_CLOSE = function(){}; function openStrip(stripId){ FUNCTION_JUST_AFTER_MENU_CLOSE = function(){ createStrip(stripId);

在我的jQuery脚本中,当用户用动画关闭菜单时,我必须在关闭动画完成后调用函数。我想通过调用带有参数的函数openStrip()来动态分配此函数。我的代码如下所示:

var FUNCTION_JUST_AFTER_MENU_CLOSE = function(){};
function openStrip(stripId){
      FUNCTION_JUST_AFTER_MENU_CLOSE = function(){
          createStrip(stripId);
      });
}
如果我调用openStrip(“aStripId”),我希望函数在菜单关闭之后:

// #1    
function(){
    createStrip("aStripId");
}
鉴于我目前的代码给出:

//#2
function(){
    createStrip(stripId);
}
i、 在关闭菜单后,将函数()赋值给变量函数时,传递给函数openStrip()的参数丢失

我怎样才能避免这种情况

编辑:我发现我的代码实际上在工作。问题出在别处。我感到困惑,因为当我查看Chrome的调试器时,它显示的是函数定义的原样(上图中的2)。但是,当它在代码的后面执行该函数时,它确实计算了传递参数的值,并且endedup执行#1


谢谢你的回答。我将其标记为正确,因为这可能是分配函数的更好方法。

最好的方法是从
openStrip
返回函数,如下所示

function openStrip(stripId) {
    return function() {
        createStrip(stripId);
    };
}
比如说,

function openStrip(stripId) {
    return function() {
        console.log(stripId);
    };
}

openStrip("aStripId")();
# aStripId
openStrip("bStripId")();
# bStripId
您甚至可以将返回的函数对象分配给不同的变量,并在以后使用它们

var aStrip = openStrip("aStripId");
aStrip();
# aStripId
aStrip();
# aStripId

闭包是通过将变量
stripId
保留在作用域中而不是通过替换代码中出现的每个变量来创建的。功能体没有改变。