首页 文章

来自不同范围变量的javascript回调函数未定义

提问于
浏览
2
function coolo()
{
    var tile1 = -1;
    var tile2 = -1;
    $(".grid-cell").click(swap);
}


function swap()
{
    console.log(tile1)
}

coolo();

当然我会收到 Uncaught ReferenceError: tile1 is not defined 错误 . 我可以通过将变量传递给函数或将变量放在全局范围内来解决它 . 有没有办法让 swap 函数访问 coolo 范围内的变量?我可以访问全局范围内的变量,为什么不呢?我尝试使用 this 关键字,但是 jquerythis 分配给已选择的dom元素 . 我不确定使用 this 是否可以在非 jquery 情况下工作 . 如果没有't, I'想了解更多关于如何在javascript中使用作用域的方法 .

3 回答

  • 0

    你想了解范围,这将有效 . 由于你只在 coolo 中使用 swap ,所以没有理由不将 swap 放在 coolo 函数内,因此与tile1的范围相同

    function coolo() {
        var tile1 = -1;
        var tile2 = -1;
        var swap = function () {
            console.log(tile1)
        }
        $(".grid-cell").click(swap);
    }
    
    coolo();
    
  • 1

    将它定义为这两个函数之外的全局变量或使用window.title

    var title 
    function A(){
    
    }
    function B(){
    
    }
    

    或将其作为参数传递给第二个函数

    function A(){
      B(title);
    }
    
  • 1

    您必须将参数传递给该函数,但您可以使它更通用一些

    function coolo()
    {
        var tile1 = -1;
        var tile2 = -1;
        $(".grid-cell").click(function(){swap(title1)});
    }
    
    
    function swap(title)
    {
        console.log(tile)
    }
    
    coolo();
    

相关问题