参数

  1. function sum(a,b){
  2. //arguments[1]没值
  3. b = 2;
  4. console.log(arguments[1]);//undefined
  5. }
  6. sum(1);
  • 实参列表传进来的时候他就有几个,就算让b等于2,它也不会往 arguments 里面加了。
  • 函数根本就没有,这个时候 b 就当一个变量用了。
  • b 实参不映射,因为形参比实参多了一位 b,只有他们相等的时候他们才会有映射的规则,不相等的时候,形参多了他不对应实参了,他们之间不映射。

    变量提升

  1. function fn (a){
  2. console.log(a);
  3. var a = 123;
  4. console.log(a);
  5. function a (){};
  6. console.log(a);
  7. var b = function (){}
  8. console.log(b);
  9. }
  10. fn(1);
  1. 执行过程如下所示:
  2. function fn (a){
  3. var a;
  4. function a (){};
  5. var b = function (){}
  6. console.log(a); //f(){}
  7. a = 123;
  8. console.log(a); //123
  9. console.log(a); //123
  10. console.log(b); //f(){}
  11. }

作用域

  • js中只有词法作用域,也就是说在定义时而不是执行时确定作用域。
  1. var value = 1;
  2. function foo() {
  3. console.log(value);
  4. }
  5. function bar() {
  6. var value = 2;
  7. foo();
  8. }
  9. bar();//1