当前位置: 首页 > 知识库问答 >
问题:

如何在jQuery中的函数内部从外部获取变量?[副本]

左丘成业
2023-03-14

我试图弄清楚如何从函数的外部获取变量,在jQuery的函数内部获取变量,但我得到的是未捕获的referenceError:myvar is not defined。有什么办法可以做到这一点吗?

我的代码的一个简单示例:

$(function(){
    var myvar = "stackoverflow";
});

$(function(){
    alert(myvar);
});

但当我在函数外定义变量时,它起作用:

var myvar = "stackoverflow";

$(function(){
    alert(myvar);
});

为什么?

感谢任何帮助!谢谢!

共有2个答案

强志学
2023-03-14

这完全是关于作用域的,在第二个示例中myvar在全局作用域中,而在第一个示例中,它包含在函数中。

您可以通过以下方式将其强制为全局:

$(function(){
  window.myvar = "stackoverflow";
});

$(function(){
  alert(myvar);
});

(假设这是在浏览器中)

史英睿
2023-03-14

第二个示例工作的原因是您将myvar定义为全局变量(可以从任何地方访问)。

第一个例子不起作用,因为变量是在函数作用域内定义的(意味着除了函数的作用域和在父函数的作用域内定义的函数的作用域之外,其他都无法访问该变量)。

正如注释中所述,这正是JavaScript的工作方式。如果这是您遇到的问题,那么可能是时候重新思考您的架构了。

一种常见的模式是将共享变量定义为父对象或函数的属性。例如:

$(function() {
    var funcOne = function() {
        this.sharedVal = 'stack overflow';
    };
    var funcTwo = function() {
        console.log(funcOne.sharedVal);
    };
});

这样,您就可以拥有不同的函数,这些函数能够在其他函数中共享它们的属性,同时保持全局名称空间的清洁。但是,请注意,在本例中,一个简单的var x='something';不作为另一个函数的属性绑定,也同样适用。

 类似资料:
  • 问题内容: 如果我有一个函数(在Python 2.5.2中)像这样: 我的问题是: 如何在 不 使用函数内部的 locals()的 情况下 从外部 获取 函数的局部变量(a,b)?(反射的种类) 是否可以从外部设置局部变量(例如 x ),以便注释行起作用?(我知道这听起来很奇怪)。 提前致谢。 编辑 : 每个人都在寻找用例。但这是一个奇怪的情况。(不要怪我,我没有创造出来)。这是场景: 我有一个包

  • 问题内容: 希望您能提供帮助。我正在寻找一种编写稍后插入一个项目的函数的方法。让我给你看一个例子: 我以为我可以在这里提供一个值,一旦我将其替换,那么显然就不那么容易了。我必须更改/添加什么才能使我的功能正常工作?函数如何知道乘法是?谢谢你们的帮助! 问题答案: 系统要求您返回一个函数,但返回的是计算得出的值: 现在将执行您期望的操作,但是如果将其分配给一个值,它可能会更有用,因此可以多次调用它,

  • 问题内容: 我正在使用函数,这样我的程序就不会一团糟,但我不知道如何将局部变量变成全局变量。 问题答案: 这是两种实现相同目的的方法: 使用参数并返回(推荐) 运行时,将获得以下输出 使用全局变量(永远不要这样做) 现在您将获得:

  • 问题内容: function parts($part) { $structure = ‘http://’ . $site_url . ‘content/’; echo($tructure . $part . ‘.php’); } 该函数使用在页面顶部定义的变量,但是此变量未传递到该函数中。 我们如何使它返回到函数中? 问题答案: 添加第二个参数 您需要将其他参数传递给函数: 如果关闭 如果您希望使

  • 我正在使用Firebase fiRecovery来保存数据。我想检索用户所在的城市,并根据它,从firest中检索特定数据并设置RecyclView。问题是:当我进行查询时,我不能在OnCompleteListener之外获取变量(城市)。在(setUpRecyclView())中(userCity)下面的代码中是“”,以及OnCompleteListener之外的任何地方。我能做什么??这是我的

  • 问题内容: 这不是直截了当的问题。在我的情况下,外部类变量和内部类setter方法的参数名称相同。喜欢: 现在,我无法初始化外部类实例变量p,因为它指示内部类。再次,我做不到它得到一个错误。现在如何分配外部p,同时将内部Class方法的参数命名为p? 问题答案: 这是您可以/应该这样做的方式: