将变量设置为“未定义”?

时间:2013-10-08 01:20:21

标签: javascript jquery variables

我有一个粘性标题,当用户向下滚动时会停留在页面顶部。

如果用户滚过某个点,我想创建一个隐藏标题菜单部分的脚本。如果用户点击屏幕顶部,我还想重新显示菜单,因此我编写了这个脚本:

var lastmargintop = 0;  

$(document).scroll(function() {


var margintop = $('#stickyheader').css('marginTop');
var margintop = parseInt(margintop, 10);

if(margintop > 10){
  $('#menu').hide('fast');
}

if (lastmargintop < 10){
  $('#menu').show('fast');
}

console.log(lastmargintop);
var lastmargintop = margintop;

});

但变量lastmargintop显示为undefined。我不确定为什么会这样。谁能告诉我为什么?

2 个答案:

答案 0 :(得分:4)

原因是JavaScript变量声明被挂起。因此,即使var lastmargintop低于console.log(),它的行为就像声明部分在上面一样。

所以这......

var lastmargintop = 0;  

$(document).scroll(function() {
    //  ...removed code...

    console.log(lastmargintop);  // expecting 0? you'll get undefined
    var lastmargintop = margintop;

});

实际上解释为:

var lastmargintop = 0;  

$(document).scroll(function() {
    var lastmargintop;

    //  ...removed code...

    console.log(lastmargintop);  // Probably clearer now why you get undefined
    lastmargintop = margintop;

});

请注意var lastmargintop已移至函数顶部。这与显式变量声明隐式发生。

答案 1 :(得分:0)

首先,如果您希望将新值lastmargintop打印到控制台,而不是之后重新定义它。另外,我不会像这样定义margintop两次,然后在定义中调用它。我会在那里使用一个新的变量名。