javascript获取函数外的函数结果

时间:2014-08-05 14:05:40

标签: javascript variables global

$(document)/ready(function(){

if (this == that) {
var myobject = {};
var variable = 55;
function dothisandthat(variable);
alert(JSON.stringify(myobject));
}

})

function dothisandthat(variable) {
//Do something
myobject["first"] = variable + 5;
myobject("second") = variable + 10;

}

如何在我的函数中使用myobject,然后再次调用函数外部的对象?

2 个答案:

答案 0 :(得分:2)

如果您只是myobject = {}window.myobject = {},甚至是$.myobject = {},它可以全局使用。将它附加到某个全局对象(如窗口),或者因为您使用的是JQuery $对象,然后您可以在整个过程中使用它。

或者@Pointy说,只需将参数添加到方法中:

function dothisandthat(variable, myObject) {

答案 1 :(得分:0)

嗯,使用面向对象的方法,您通常会告诉对象修改它的内部状态,这会同时解决您的范围问题。

function MyObject() {
    this.first = 0;
    this.second = 0;
}

MyObject.prototype.doThisAndThat = function (variable) {
    this.first = variable + 5;
    this.second = variable + 10;
};

$(document).ready(function () {
    //...
    var myObject = new MyObject();

    myObject.doThisAndThat(55);
    alert(JSON.stringify(myObject));

    //...
});

但是,如果您想使用功能方法(数据和行为单独生活),您必须在myObject范围内提供doThisAndThat。有几种方法可以做到这一点:

  1. 将对象作为参数传递给函数。这通常是我喜欢的方式,因为它使依赖性显式化。

    请注意,纯函数方法不会改变传入函数的对象,但会返回对象的修改副本,因为数据结构通常是不可变的。

    < / LI>
  2. 依靠关闭。在这种情况下,您只需在文档就绪回调中移动doThisAndThat函数声明。

  3. 依靠全局变量或众所周知的对象。我会在大多数时候避免这种解决方案,因为它会使您的依赖项隐藏起来并且您的代码更难以测试。