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

我试图找出如何在函数中从外部获取变量,在jQuery中的函数内部但我得到Uncaught ReferenceError: myvar is not defined 。 有没有办法做到这一点?

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

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

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

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

为什么?

任何帮助表示赞赏! 谢谢!

第二个示例有效的原因是因为您将myvar定义为全局变量(可从任何位置访问)。

第一个例子不起作用,因为变量是在function范围内定义的(这意味着它除了函数的作用域以外都是不可访问的,并且在父函数的作用域内定义了函数的作用域)。

正如评论中所述,这就是JavaScript的工作原理。 如果这是您遇到的问题,那么可能是重新考虑您的架构的时候了。

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

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

通过这种方式,您可以拥有能够在其他函数中与其他函数共享其属性的不同函数,同时还可以保持全局命名空间的清晰。 但是请注意,在这个例子中,一个简单的var x = 'something'; 不受限制为另一个函数的属性也可以。

关于范围界定,在你的第二个例子中,myvar在全局范围内,而在第一个包含在函数中。

你可以强制它是全局的:

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

(假设这是在浏览器中)

这是由于变量的范围。 $(function()中定义的变量在此函数中具有范围。此处的enclusre决定范围。函数外部定义的变量具有全局范围并在window对象中定义。

范围内function。

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

窗口对象内的范围。

 $(function(){ window.myvar = "stackoverflow"; }); // myvar is accessible here. 

当你在函数内部声明变量时。它的范围仅限于该函数(如果是你的一个场景)。

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