var x = 2;
function fun() {
x = 3;
var x = 4;
document.write(x);
}
document.write(x);
fun()
document.write(x);
有人可以帮助我了解控制流程。为什么输出242在看起来应该是243时会如此。将不胜感激所有帮助。
答案 0 :(得分:6)
这是由于吊装。位于@user_product = UserProduct.new(user_product_params)
@products = Product.where(style_id: @user_product.style_id, size: @user_product.size, color: @user_product.color, country: @user_product.country)
@user_product.product_id = @products.first.id
内部的变量x
被带到作用域顶部,然后分配值fun
,然后分配值3
。因此,第4
行不是更改全局变量,而是更改本地变量。该代码的行为类似于
x=3;
答案 1 :(得分:5)
修改x=3
时,实际上并没有更改全局变量x
,而是在功能块中声明的变量(因为var
变量具有函数作用域)。将声明var x
提升到顶部,然后对x = 3
进行修改
<script>
var x=2;
function fun(){
//var x; hoisted to the top;
console.log("x is hoisted here and uninitialized value will be", x)
x=3; //initialized, actually referring to the variable declared in the function scope
var x = 4; //declared but hoisted at the top
document.write(x);
}
document.write(x);
fun()
document.write(x);
</script>
要真正在全局范围内更改变量,请使用window.x
来引用它:
<script>
var x=2;
function fun(){
window.x=3; //modifying the global variable 'x`
var x = 4;
document.write(x);
}
document.write(x);
fun()
document.write(x);
</script>