嵌套函数中的jQuery范围

tha*_*nce 0 jquery scope

这有效:

$(document).ready(function(){

    $("#inputbuttonid").on("click", function(){ 

        var inputtext = $("#inputtextid").val();
        alert(inputtext);

    });

});
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

$(document).ready(function(){

    var inputtext = $("#inputtextid").val();

    $("#inputbuttonid").on("click", function(){ 

        alert(inputtext);

    });

});
Run Code Online (Sandbox Code Playgroud)

“工作”是指它会警告正确的信息。

以上两种情况的唯一区别在于,第二种是

var inputtext = $("#inputtextid").val();
Run Code Online (Sandbox Code Playgroud)

在外部函数中,而在第一个中,我将其放在内部函数中。

根据JQuery手册,“局部作用域通过函数起作用”,这意味着“在另一个函数中定义的任何函数都可以访问在外部函数中定义的变量”(引自JQuery手册)。

那么,为什么在上述第二种情况下,内部函数不能访问“ inputtext”呢?

Fel*_*ing 5

那么,为什么在上述第二种情况下,内部函数不能访问“ inputtext”呢?

它确实具有访问权1,但是您正在用户输入值之前执行该语句。在DOM准备就绪时立即读取该值,而不是在用户单击按钮时读取。

上面两种情况的唯一区别在于,第二种是将其放在外部函数中,而第一种是,将其放在内部函数中。

这种变化的结果是该语句现在在不同的时间执行,此时输入字段还没有值。


1:如果没有,您将得到参考错误。