我正在试图弄清楚如何在函数中从外部获取变量,在jQuery中的函数内部,但我得到Uncaught ReferenceError: myvar is not defined
。有没有办法做到这一点?
我的代码的一个简单示例:
$(function(){
var myvar = "stackoverflow";
});
$(function(){
alert(myvar);
});
但是当我在函数外定义变量时,它可以工作:
var myvar = "stackoverflow";
$(function(){
alert(myvar);
});
为什么?
任何帮助表示赞赏!谢谢!
答案 0 :(得分:10)
第二个例子起作用的原因是因为你将myvar
定义为一个全局变量(可以从任何地方访问)。
第一个例子不起作用,因为变量是在功能范围内定义的(意味着它除了函数的作用域以外的所有部分都是不可访问的,并且在该父函数的作用域内定义了函数的范围)。
正如评论中所述,这就是JavaScript的工作原理。如果这是您遇到的问题,那么可能是重新考虑您的架构的时候了。
一种常见模式是将共享变量定义为父对象或函数的属性。例如:
$(function() {
var funcOne = function() {
this.sharedVal = 'stack overflow';
};
var funcTwo = function() {
console.log(funcOne.sharedVal);
};
});
通过这种方式,您可以拥有能够在其他函数中与其他函数共享其属性的不同函数,同时还可以保持全局命名空间的清晰。但请注意,在此示例中,未绑定为另一个函数的属性的简单var x = 'something';
也可以。
答案 1 :(得分:8)
关于范围界定,在你的第二个例子中,myvar在全局范围内,而在第一个例子中包含在函数中。
你可以强迫它成为全球性的:
$(function(){
window.myvar = "stackoverflow";
});
$(function(){
alert(myvar);
});
(假设这是在浏览器中)
答案 2 :(得分:3)
这是由于变量的范围。 $(function()中定义的变量在此函数中具有范围。此处的enclusre决定范围。函数外部定义的变量具有全局范围并在window对象中定义。
范围内的功能。
$(function(){
var myvar = "stackoverflow";
});
// myvar is not accessible here.
窗口对象内的范围。
$(function(){
window.myvar = "stackoverflow";
});
// myvar is accessible here.
答案 3 :(得分:1)
当你在函数内部声明变量时。它的范围仅限于该函数(如果是你的一个场景)。
要在函数外的任何地方访问它们,您需要将其声明为全局变量。这是第二种情况。