参数
function sum(a,b){ //arguments[1]没值 b = 2; console.log(arguments[1]);//undefined}sum(1);
- 实参列表传进来的时候他就有几个,就算让b等于2,它也不会往 arguments 里面加了。
- 函数根本就没有,这个时候 b 就当一个变量用了。
- b 实参不映射,因为形参比实参多了一位 b,只有他们相等的时候他们才会有映射的规则,不相等的时候,形参多了他不对应实参了,他们之间不映射。
变量提升
function fn (a){ console.log(a); var a = 123; console.log(a); function a (){}; console.log(a); var b = function (){} console.log(b); }fn(1);
执行过程如下所示:function fn (a){ var a; function a (){}; var b = function (){} console.log(a); //f(){} a = 123; console.log(a); //123 console.log(a); //123 console.log(b); //f(){} }
作用域
- js中只有词法作用域,也就是说在定义时而不是执行时确定作用域。
var value = 1; function foo() { console.log(value);}function bar() { var value = 2; foo();} bar();//1