为什么将var传递给函数使该var内部不可变?

时间:2018-09-12 11:13:34

标签: javascript pass-by-reference var

我是js的新手,我想了解这三种情况下x变量之间的区别,以及为什么这段代码中的第三种情况给我x = 10仍然感到困惑

      var x = 10;
      function test(){
            var x = 15;
      }
      test();
      console.log(x)// return 10

      ///////////////////////////
      var x = 10;
      function test(){
             x = 15;
      }
      test();
      console.log(x)// return 15

      ////////////////////////////
      var x = 10;
      function test(x){
             x = 15;
      }
      test();
      console.log(x)// return 10

2 个答案:

答案 0 :(得分:1)

这是因为x是通过值(而不是引用)传递的。请参阅此以获得更详细的解释:http://jasonjl.me/blog/2014/10/15/javascript/

答案 1 :(得分:1)

var x = 10;
function test(){
  var x = 15;
}

在功能scope中创建了新的x

var x = 10;
function test(){
  x = 15;
}

x属于外部作用域

var x = 10;
function test(x){
  x = 15;
}
  

原始参数(例如数字)通过以下方式传递给函数   值;值传递给函数,但是如果函数   更改参数的值,此更改不会反映   全局或调用函数中。

Mdn