为什么将var传递给函数会使这个var变成不可变的内部?

问题描述 投票:-1回答:2

我是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
javascript pass-by-reference var
2个回答
1
投票
var x = 10;
function test(){
  var x = 15;
}

新的x是在功能scope中创建的

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

x属于外部范围

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

原始参数(例如数字)按值传递给函数;该值将传递给函数,但如果函数更改了参数的值,则此更改不会全局或在调用函数中反映。

Mdn


1
投票

这是因为x是按值(而不是引用)传递的。有关更详细的解释,请参阅此内容:http://jasonjl.me/blog/2014/10/15/javascript/

© www.soinside.com 2019 - 2024. All rights reserved.