2016-07-27 98 views
0

我不知道如何访问pubOuter,任何人都可以找出这一个呢?它始终返回undefined,因为我找不到外部inner2()功能。或者我错过了一些明显的东西。非常感谢。如何从对象访问变量?

的Javascript

var myObject = (function(){ 
    var outer; 

    function inner1(IN_number){ 
    outer = IN_number*2; 
    } 

    function inner2(){ 
    inner1(10); 
    return outer; 
    } 


    return { 
    pubFnInner1: inner1, 
    pubFnInner2: inner2, 
    pubOuter: outer 
    }; 

})(); 

$("#click").on("click", function(){ 
    console.log("outer" + myObject.pubOuter); 
}); 

HTML

<button id="click">Click</button> 
+5

我们需要更多信息。从我看到的没有函数调用的'inner1',那么'outer'将是不确定的。清楚的是,你需要在'return {...}'之前调用它,之后'outer'将会超出范围并且不能被编辑。 –

+1

否则调用inner2();在返回声明之前。 –

+0

这就是当你工作时间过长时发生的事情!我错过了功能:)谢谢斯宾塞! –

回答

1

您正在成功访问putOuter属性。问题是,在使用它之前它没有设置任何东西。

我修改了代码,将outer初始化为1。否则,当您在inner1函数中乘以IN_number时,将导致NaN

var myObject = (function(){ 
    var outer = 1; 

    function inner1(IN_number){ 
    outer = IN_number*2; 
    } 

    function inner2(){ 
    inner1(10); 
    return outer; 
    } 


    return { 
    pubFnInner1: inner1, 
    pubFnInner2: inner2, 
    pubOuter: outer 
    }; 

})(); 

$("#click").on("click", function(){ 

    console.log("outer" + myObject.pubOuter); 
    myObject.pubFnInner1(10); 
    console.log("outer" + myObject.pubOuter); 

    // or combine both steps by using your pubFnInner2 method. 
    console.log("outer" + myObject.pubFnInner2()); 
}); 
0

pubOuter是不确定的,因为你将其分配给outer这是不确定的,因为你永远不会运行inner1,你需要这样做:

var myObject = (function(){ 
    var outer; 

    function inner1(IN_number){ 
    outer = IN_number*2; 
    } 

    function inner2(){ 
    inner1(10); 
    return outer; 
    } 


    return { 
    pubFnInner1: inner1(), 
    pubFnInner2: inner2(), 
    pubOuter: outer 
    }; 

})(); 

$("#click").on("click", function(){ 
    console.log("outer" + myObject.pubOuter); 
});