如何在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 :(得分: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>
&#13;
为了证明它看下面的代码,显然变量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>
&#13;