JavaScript 里参数赋值引发的思考?

image.png

如上图所示,上述赋值可以等价于下面的代码吗?

image.png

一直没搞懂函数中的参数到底是一个怎样的存在...


还望先生不吝赐教~

可能大佬们误解我想表达的意思了,我想说的是站在编译器的角度,第一张图片的函数调用过程,是否相当于在函数内部 var 了一个变量,然后再将参数赋予,然后计算呢?

阅读 1.9k
5 个回答

确实是不一样的,你定义的变量,参数什么是给人看的,不是给机器看的
对计算机来说

你的函数1 当你调用函数test(2)的时候,函数执行前已经把分配了内存空间并把2这个数字放到了内存地址中,由于你直接return了,所以这个地址里的2原封不动的,返回给了函数调用者。

你的第二个函数,相当于,在函数运行过程中分配了一块内存空间,存放了2这个数字,并把这个数字返回给了调用者

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

不等价。第二张图片传入的参数没有使用。

你可以 test(3) 就会发现返回不一致。

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

emmm……这个问题就很有意思了,你可以先了解一下实参和形参。

如果说单纯是结果,那么是等同的。

但实际情况下并不是等价的,比如你要做一个加法的函数,函数是以下这样的:

function add(a, b){
  return a + b
}
add(1, 2)
// log 3

如果说你写成下面这样,返回的结果也是一样的对吧:

function add(){
  var a,b
  a = 1
  b = 2
  return a + b
}
add(1, 2)
// log 3

但是如果你输入的不是 12 呢?比如说是 23 那么第二种写法就没办法返回一个正确的结果了。

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

一样的

    1. 最早没有函数概念,只有语句,由上往下依次执行,比如:

      console.log(1)
      console.log(2)
  1. 然后有一些语句需要重复执行,比如:

    console.log(1)
    console.log(2)
    // 其他代码
    console.log(1)
    console.log(2)

    然后就有人想出了一些结构来简化写法,如下:

    function test {
      console.log(1)
      console.log(2)
    }
    
    
    test();
    // 其他代码
    test();
  2. 再后来,为了更加灵活使用,于是扩展了可以传递参数,代码如下:

    function test(a, b) {
      console.log(a)
      console.log(b)
    }
    test(1, 2);
    // 相当于
    function test() {
      var a = 1, b = 2;
      console.log(a)
      console.log(b)
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏