如上图所示,上述赋值可以等价于下面的代码吗?
一直没搞懂函数中的参数到底是一个怎样的存在...
还望先生不吝赐教~
可能大佬们误解我想表达的意思了,我想说的是站在编译器的角度,第一张图片的函数调用过程,是否相当于在函数内部 var 了一个变量,然后再将参数赋予,然后计算呢?
如上图所示,上述赋值可以等价于下面的代码吗?
一直没搞懂函数中的参数到底是一个怎样的存在...
还望先生不吝赐教~
可能大佬们误解我想表达的意思了,我想说的是站在编译器的角度,第一张图片的函数调用过程,是否相当于在函数内部 var 了一个变量,然后再将参数赋予,然后计算呢?
不等价。第二张图片传入的参数没有使用。
你可以 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
但是如果你输入的不是 1
和 2
呢?比如说是 2
和 3
那么第二种写法就没办法返回一个正确的结果了。
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
一样的
最早没有函数概念,只有语句,由上往下依次执行,比如:
console.log(1)
console.log(2)
然后有一些语句需要重复执行,比如:
console.log(1)
console.log(2)
// 其他代码
console.log(1)
console.log(2)
然后就有人想出了一些结构来简化写法,如下:
function test {
console.log(1)
console.log(2)
}
test();
// 其他代码
test();
再后来,为了更加灵活使用,于是扩展了可以传递参数,代码如下:
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)
}
楼上已经解答的比较全面了,这里补充一个可视化执行过程的网站,可以自己去调试下,然后尝试理解,希望对你有所帮助~
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
27 回答13k 阅读
8 回答3.5k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
5 回答5.3k 阅读✓ 已解决
4 回答1.6k 阅读✓ 已解决
6 回答1.1k 阅读
3 回答1.7k 阅读
确实是不一样的,你定义的变量,参数什么是给人看的,不是给机器看的
对计算机来说
你的函数1 当你调用函数test(2)的时候,函数执行前已经把分配了内存空间并把2这个数字放到了内存地址中,由于你直接return了,所以这个地址里的2原封不动的,返回给了函数调用者。
你的第二个函数,相当于,在函数运行过程中分配了一块内存空间,存放了2这个数字,并把这个数字返回给了调用者