jQuery   发布时间:2022-04-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jQuery匿名函数变量范围大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
有人可以解释为什么以下不起作用:

function displayResults(data) {
    $("#odNextPage").click(function() {
        alert(data.queryTypE); // "undefined"
        return false;
    });
}

为什么我可以在单击匿名函数中使用数据对象?

编辑:queryType属性实际上没有设置我认为导致问题,抱歉.虑到click函数在数据对象范围之外执行的,我仍然有兴趣解释为什么它现在可以工作.

解决方法

调用displayResults的东西不仅在调用函数时控制数据,而且在它返回时(因此在调用回调之前)控制数据.调用序列可能如下所示:

data = { /* interesTing things */ };
displayResults(data);
delete data.queryType;
// Time passes and then your callBACk gets called
// but data.queryType is undefined.

我不知道你的情况的确切情况,但上面总结了可能发生的情况.

当你对数据产生闭包时,你会抓住数据,但这并不意味着你已经锁定了内部数据.

既然我们知道数据来自哪里以及为什么它首先被破坏了,我们就可以虑为什么当数据正确并且不管它时它是如何工作的.

当您创建匿名回调函数时:

function() {
    alert(data.queryTypE);
    return false;
}

你正在创建一个闭包,它保持对数据的引用(或者更准确地说,指向哪些数据),并且在没有人引用数据之前,数据不会被终止.变量的生命周期取决于其范围;您的数据变量存在于displayResults函数中.但是变量只引用(或指向)内存中的对象,并且该对象或多或少地会一直存在,直到没有人再引用它为止.

变量名称和被命名的对象是具有不同生命周期的独立实体.引用李小龙的话:

即使它们不被称为指针,你也无法摆脱编程中的指针.

大佬总结

以上是大佬教程为你收集整理的jQuery匿名函数变量范围全部内容,希望文章能够帮你解决jQuery匿名函数变量范围所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。