为什么此代码的输出是242,而不是243

时间:2019-04-12 12:23:17

标签: javascript html

var x = 2;

function fun() {
  x = 3;
  var x = 4;
  document.write(x);
}

document.write(x);

fun()

document.write(x);

有人可以帮助我了解控制流程。为什么输出242在看起来应该是243时会如此。将不胜感激所有帮助。

2 个答案:

答案 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>