如何在JavaScript中的函数对象内部进行变量内存分配?
问题描述:
变量的作用域,初始化以及在javascript函数内部和外部如何使用?我已经写了下面的代码:如何在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。我在这里错过了什么?
答
calculator.x = 10
增加X到函数的性质
计算器现指物体{X:X,的getX}并且想更改的值不变量x,但计算器
的属性x 访问性质的变化,你将需要输出this.x
<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>
为了证明这一点看看下面的代码,明确变量x没有被改变,这的getX无法访问
<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>
什么是预期的结果,而不是财产被改变? – guest271314
10,因为我已经提到在最后 – maverick
'x'在'calculator'内的'5'立即调用函数 – guest271314