如何在javascript中的函数对象内部进行可变内存分配?

时间:2017-08-13 18:54:02

标签: javascript closures

如何在javascript函数外部和内部对作用进行作用域,初始化和使用?我写了以下代码:

<div id="output">
</div>

<script>
var calculator = function()
{
        var x = 5;
        getx = function(){
           return x;
        }
        return { x:x, getx };
}();
document.getElementById("output").innerHTML = calculator.x;
calculator.x=10;
document.getElementById("output").innerHTML += " "+ calculator.x + " "+calculator.getx();
</script>

我读到在JS执行中,首先扫描代码以获取所有变量声明,然后执行函数。

在计算器对象中定义的var x是值类型作为其整数。

getx是嵌套函数,即使在执行getx返回后,每个闭包也可以访问变量“x”。

calculator.x的第一个输出为expected=5;

calculator.x的第二个输出为expected=10;(x被修改)

calculator.getx()的第三个输出= 5; (我无法理解这一点)

“x”是值类型,它也应该在函数范围内有修改的值,第三个输出应该是= 10。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

calculator.x = 10 

将x添加到函数
的属性中 计算器现在指对象 {x:x,getx} ,您要更改的值不是变量x,而是计算器的属性x 要访问属性的更改,您需要输出 this.x

&#13;
&#13;
<div id="output">
</div>

<script>
var calculator = function()
{
        var x = 5;
        getx = function(){
           return this.x;
        }
        return { x:x, getx };
}();
document.getElementById("output").innerHTML = calculator.x;
calculator.x=10;
document.getElementById("output").innerHTML += " "+ calculator.x + " "+calculator.getx();
</script>
&#13;
&#13;
&#13;

为了证明它看下面的代码,显然变量x没有被改变,而是属性正在改变,getx无法访问

&#13;
&#13;
<div id="output">
</div>

<script>
var calculator = function()
{
        var x = 5;
        getx = function(){
           return x;
        }
        setx = function(a){
          x = a;
        }
        return { x:x, getx, setx };
}();
document.getElementById("output").innerHTML = calculator.x;
calculator.setx(10);
document.getElementById("output").innerHTML += " "+ calculator.x + " "+calculator.getx();
</script>
&#13;
&#13;
&#13;