函数声明
1.函数体
function test(){
pass;
}
test();
2.命名函数表达式
var test= function abc(){
pass
}
test();
该种方式忽略的了函数的 名字 abc
,所以执行的时候使用test();
3.匿名函数表达式
var test = function(){
pass
}
test();
传参
function test(a){
console.log(arguments);
}
test(11,2,3);
chrome中显示为:

答应arguments里面得值
function test(a){
for (var i =0; i<arguments.length;i++){ //形参长度
console.log(i);
}
console.log(test.length); //形参长度
}
test(11,2,3)
其中,arguments.length
代表实参长度,如果要知道新参长度 test.length
就是形参长度
不固定形参的好处
任意数字求和
function sum(){
var result = 0;
for (var i =0; i<arguments.length;i++){
result += arguments[i];
}
console.log(result);
}
sum(11,2,3);
>>>
16
注:实参决定了arguments的映射关系
函数的终止和结束
return
function myNumber(a){
return +a
}
var myNumber= myNumber('123');
console.log(myNumber);
console.log(typeof(myNumber));
>>>
123
number
作用域
1.任何变量未经声明直接赋值,归window所有
function test(){
var a = b = 123;
}
test()
console.log(window.b);
console.log(window.a);
>>>
123
undefined
2.一切声明的全局变量,全是window的属性
function test(){
var a =123;
}
test();
console.log(window.a);
>>>
undefined
a不是全局变量,是test函数的局部变量
3.window就是全局
var a = 123;
console.log(a);=== console.log(window.a)
4.预编译发生在函数执行的前一刻
function fn(a){
console.log(a);
var a = 123;
console.log(a);
function a(){}
console.log(a);
var b = function(){}
console.log(b);
function d(){}
}
fn(1);
>>>
ƒ a(){}
123
123
ƒ (){}
过程:
①创建AO(Activation Object )对象(执行期上下文)
AO{
}
②找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
AO{
a: undefined,
b: undefined,
}
③将实参值和形参统一
AO{
a: 1,
b: undefined,
}
④找函数体里面的函数声明,值赋予函数体
AO{
a: function a(){},
b: undefined,
d: function d(){}
}
网友评论