变量未定义,即使是全局定义

时间:2014-05-24 00:41:07

标签: javascript jquery css

所以我有这个功能,我在全局范围内声明var togglesmall,并且我得到了#34; Uncaught ReferenceError:togglesmall未定义"

$(document).ready(function(){
if ( !$('.sound,.sound-small').hasClass('clickd') || $('.sound').hasClass('gone') ){

$('body').on('mouseleave', function(){
togglesmall = setTimeout(function(){$('.sound-small').fadeOut()}, 2000);
});

$('body').on('mouseenter', function(){
clearTimeout(togglesmall);
$('.sound-small').fadeIn(500);
});
};

$('.sound').on('click', function(){
$('.sound').fadeOut(1000);
$('.sound').addClass('clickd');
});
});

这不是我第一次收到它,但我不知道为什么会这样。

我正在学习js,所以我是个新手。整个代码是由我写的,所以如果你有任何sugestions我很欣赏。

4 个答案:

答案 0 :(得分:0)

您应该像这样在顶部声明togglesmall:

var togglesmall = null;

否则,变量的范围变得模棱两可。

答案 1 :(得分:0)

你得到ReferenceError,因为

togglesmall = setTimeout(...)

正在执行global assignment,只有在运行此代码后才创建该变量。

做类似的事情:

if (typeof togglesmall != 'undefined')
  clearTimeout(togglesmall)

将修复您的ReferenceError

或者,正如David W Lee所建议的那样:

$(document).ready(function(){
var togglesmall;  // add this; defines the variable and initializes to undefined

有趣的事实:像您正在使用

进行全局分配
previousUndeclaredName = value;

没有遇到像

这样的事情
var previousUndeclaredName;

或在参数列表中

function doSomething(previousUndeclaredName) {

总是在严格模式下成为ReferenceError。[1]

[1] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#Description

答案 2 :(得分:0)

要使变量全局定义,您需要在文档准备好时创建它。所以它一定是这样的

$(document).ready(function(){
    var togglesmall;
    ........
    // continue your code below
});

答案 3 :(得分:0)

您需要在文档准备好后创建它。如下......

$(document).ready(function(){
    var togglesmall;
    //yourode
});