如何在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。我在这里错过了什么?

+0

什么是预期的结果,而不是财产被改变? – guest271314

+0

10,因为我已经提到在最后 – maverick

+0

'x'在'calculator'内的'5'立即调用函数 – guest271314

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>

+0

可能这是我正在寻找的东西,但没有得到如何返回x不同于返回this.x? – maverick

+0

检查编辑答案 – marvel308

+0

x正在被添加到计算器的属性,但getx()正在访问的x是内部定义的变量,您正在更改属性,但变量保持不变 – marvel308