关于javascript:在jquery中,如何从外部(函数内部)获取变量

How to get variables from the outside, inside a function in jQuery?

本问题已经有最佳答案,请猛点这里访问。

我想知道如何从函数的外部、jquery的函数的内部获取变量,但是我得到了Uncaught ReferenceError: myvar is not defined。有什么办法吗?

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

1
2
3
4
5
6
7
$(function(){
    var myvar ="stackoverflow";
});

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

但当我在函数外部定义变量时,它会工作:

1
2
3
4
5
var myvar ="stackoverflow";

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

为什么?

感谢您的帮助!谢谢您!


第二个例子之所以有效,是因为您将myvar定义为全局变量(可以从任何地方访问)。

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

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

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

1
2
3
4
5
6
7
8
$(function() {
    var funcOne = function() {
        this.sharedVal = 'stack overflow';
    };
    var funcTwo = function() {
        console.log(funcOne.sharedVal);
    };
});

这样,您就可以拥有不同的函数,这些函数能够在其他函数中共享它们的属性,同时保持全局命名空间的干净。然而,请注意,在本例中,一个简单的var x = 'something';如果不作为另一个函数的属性绑定,也可以做到这一点。


在第二个示例中,myvar在全局范围内,而在第一个示例中,它包含在函数中。

但是,您可以强制它是全局的:

1
2
3
4
5
6
7
$(function(){
  window.myvar ="stackoverflow";
});

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

(假设在浏览器中)


是由于变量的作用域。在$(function()中定义的变量在此函数内有作用域。这里的封套描述了范围。在函数外部定义的变量具有全局范围并在窗口对象中定义。

函数内部的作用域。

1
2
3
4
$(function(){
    var myvar ="stackoverflow";
});
// myvar is not accessible here.

窗口对象内的作用域。

1
2
3
4
5
$(function(){
    window.myvar ="stackoverflow";
});

// myvar is accessible here.

当您在函数内部声明变量时,它的作用域仅限于该函数(在您的场景中)。

要在函数外部的任何地方访问它们,需要将其声明为全局变量。这是第二种情况。