函数

2020-01-13  本文已影响0人  山猪打不过家猪

函数声明

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中显示为:


image.png

答应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(){}
}
上一篇下一篇

猜你喜欢

热点阅读