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

Variable not defined even being globally defined

本文关键字:全局 定义 即使是 变量 未定义      更新时间:2023-09-26

所以我有这个函数,我在全局声明var togglessmall,我得到"Uncaught ReferenceError: togglessmall未定义"

$(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,所以我是个新手。整个代码是我写的,所以如果你有任何建议,我很感激。

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

var togglesmall = null;

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

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

您将获得ReferenceError,因为

togglesmall = setTimeout(...)

执行全局赋值,在代码运行后只创建变量。

执行如下操作:

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描述

您需要在文档准备好时创建它。像下面…

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