簡體   English   中英

如何在javascript中的函數對象內部進行變量內存分配?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM