Javascript在函数外获取函数结果

javascript get function results outside of function

本文关键字:函数 结果 获取 Javascript      更新时间:2023-09-26
$(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在我的函数中使用,然后再次调用函数外的对象?

如果您只做myobject = {}window.myobject = {},甚至$.myobject = {},它可以全局可用。将它附加到一些全局对象,比如window,或者因为你使用JQuery, JQuery $ object,然后你可以一直使用它。

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

function dothisandthat(variable, myObject) {

对于面向对象的方法,你通常会告诉对象修改它的内部状态,这同时解决了你的作用域问题。

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));
    //...
});

但是,如果您想使用功能方法(数据和行为分开存在),则必须使myObjectdoThisAndThat的作用域中可用。有几种方法可以做到这一点:

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

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

  2. 依赖闭包。在这种情况下,您只需将doThisAndThat函数声明移动到document ready回调中。

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