如何在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.
当你在函数内部声明变量时。它的范围仅限于该函数(如果是你的一个场景)。
要在函数外的任何地方访问它们,您需要将其声明为全局变量。 这是第二种情况。