[英]How variable memory allocation takes place inside function object in 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”。
計算器.x的第一個輸出為expected=5;
計算器.x的第二個輸出是expected=10;
(因為x被修改)
Calculator.getx 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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.