变量的作用域、初始化以及在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执行中,首先扫描代码以查找所有变量声明,然后执行函数。
在计算器对象中定义的变量x是作为其整数的值类型。
getx是嵌套函数,根据闭包,即使在执行getx返回之后,也可以访问变量"x“。
X的第一个输出为expected=5;
X的第二个输出为expected=10;
(修改为x)
calculator.getx()
的第三个输出为=5;(我无法理解这一点)
"x“是值类型,它在函数范围内也应该有修改的值,第三个输出应该是be=10。这里我遗漏了什么?
发布于 2017-08-13 19:08:48
calculator.x = 10
将x添加到函数的属性中。
计算器现在是指对象{ x:x,getx },您正在更改的值不是变量x,而是计算器的属性x。
要访问属性的更改,您需要输出--这个.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>
https://stackoverflow.com/questions/45663825
复制相似问题