如何在jQuery中在函数内部获取外部的变量?
如何在jQuery中在函数内部获取外部的变量?
我正在尝试弄清楚如何在jQuery的函数内部的函数中从外部获取变量,但是我得到了\"Uncaught ReferenceError: myvar is not defined\"的错误。有没有办法解决这个问题?\n以下是我的代码的简单示例:\n
$(function(){ var myvar = "stackoverflow"; }); $(function(){ alert(myvar); });
\n但是当我在函数外部定义变量时,它可以正常工作:\n
var myvar = "stackoverflow"; $(function(){ alert(myvar); });
\n为什么会这样?\n非常感谢任何帮助!谢谢!
问题原因:该问题的原因是变量的作用域。在 $(function(){} 中定义的变量只在该函数内部有效。变量的作用域由封闭函数决定。而在函数外部定义的变量具有全局作用域,并且定义在 window 对象中。
解决方法:
1. 在函数内部使用全局变量:可以在函数内部使用 window 对象来访问函数外部定义的变量。例如,可以将变量赋值给 window 对象的属性,然后在函数内部通过 window 对象来访问该属性。
示例代码:
$(function(){ window.myvar = "stackoverflow"; }); // 在这里可以访问 myvar 变量
2. 将函数外部的变量作为参数传递给函数:可以将函数外部的变量作为参数传递给函数,然后在函数内部使用该参数来访问变量的值。
示例代码:
var myvar = "stackoverflow"; $(function(myvar){ // 在这里可以访问传递进来的 myvar 参数 }(myvar));
问题:如何在jQuery的函数内部从外部获取变量?
原因:第二个例子可以工作的原因是因为你将myvar
定义为全局变量(可以从任何地方访问)。
第一个例子无法工作,因为变量被定义在函数的作用域内(意味着除了该函数的作用域和父函数作用域内定义的函数的作用域之外,其他地方都无法访问)。
正如在评论中所述,这就是JavaScript的工作方式。如果这是你遇到的问题,那么现在可能是重新思考你的架构的时候了。
解决方法:一个常见的模式是将共享变量定义为父对象或函数的属性。例如:
$(function() { var funcOne = function() { this.sharedVal = 'stack overflow'; }; var funcTwo = function() { console.log(funcOne.sharedVal); }; });
通过这种方式,你可以拥有不同的函数,它们可以在其他函数内部共享属性,同时保持全局命名空间的整洁。然而,需要注意的是,在这个例子中,一个简单的var x = 'something';
,它没有被绑定为另一个函数的属性,也可以很好地工作。