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

时间:2014-01-30 09:53:14

标签: javascript jquery

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

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

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

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

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

var myvar = "stackoverflow";

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

为什么?

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

4 个答案:

答案 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)

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

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