2017-08-13 60 views
0

變量的作用域,初始化以及在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

回答

1
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

相關問題