2014-04-27 53 views
1

在我的jQuery脚本中,当用户使用动画关闭菜单时,必须在关闭动画完成后调用函数。我想通过使用参数调用函数openStrip()来动态分配这个函数。我的代码如下所示:在javascript中为变量分配函数时识别变量

var FUNCTION_JUST_AFTER_MENU_CLOSE = function(){}; 
function openStrip(stripId){ 
     FUNCTION_JUST_AFTER_MENU_CLOSE = function(){ 
      createStrip(stripId); 
     }); 
} 

如果我叫openStrip( “aStripId”),我希望FUNCTION_JUST_AFTER_MENU_CLOSE是:

// #1  
function(){ 
    createStrip("aStripId"); 
} 

而我当前的代码给出:

//#2 
function(){ 
    createStrip(stripId); 
} 

即在将函数()分配给变量FUNCTION_JUST_AFTER_MENU_CLOSE时,传递给函数openStrip()的参数会丢失。

我该如何避免这种情况。

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

感谢您的答案。我认为它是正确的,因为这可能是分配函数的更好方法。

+0

通过在变量*中保留变量'stripId' *创建闭包,而不是通过重放在代码中每一次出现它。功能体没有改变。 – Bergi

回答

0

,最好的办法是返回一个函数,从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