一.原来一直c++开发,偶尔会遇到参数入栈顺序的问题,而c++是右侧函数先入栈.例子如下:
#include <iostream> using namespace std; int left(int& a) { a *= 2; cout << "left " << a << endl; return a; //10 } int right( int& a) { a += 2; cout << "right " << a << endl; return a; //5 } int _plus( int a = 0, int b = 0 ) { cout << "_plus " << a << " " << b << endl; return a + b; //15 } int main() { int a = 3; cout << _plus( left(a), right(a) ) << endl; //15 int b; cin >> b; }
输出结果:
right 5
left 10
15c++的入栈顺序先right后left,所以先加后乘,结果为15.
二.由于先入为主,在后来学习js的时候,也遇到同样的问题结果入栈书序顺序为先成左后右而且全程是引用
function test7() { function left(a){ a *= 2; console.log( "left()", a); return a; } function right(a) { a += 2; console.log( "right()", a); return a; } function _plus( a = 0, b = 0 ){ console.log( "_plus a:" + a + " b:" + b ); return a + b; } var a = 3; console.log( _plus( left(a), right(a) ) ); } test7();
输出结果:
left() 6
right() 5
_plus a:6 b:5
11js中参数先左后右,结果与c++不同.而且默认是引用传值,所以更应该小心.