函数-二

arguments的使用

作用:保存用户传递进来的参数

总结:如果参数确定,写形参接受

​ 如果不确定,用arguments来获取用户输入的参数

案例

求任意个数中的最大值
function getMax () {
    var max = arguments[0];
    for (var i = 0; i < arguments.length; i++) {
        if (max < argumnents[i]) {
            max = arguments[i];
        }
    }
    return max;
}
调用
getMax(1,2,3,4,5,6);
复制代码

求任意个数的和省略​求任意个数的最大值复制代码

匿名函数和自调用函数

匿名函数定义:没有函数名的函数

function () {}
匿名函数不能单独使用

如果调用?????
1、将匿名函数赋值给变量
//var fn = 2
var fn = function () {
    jscode
}
调用函数:
函数名();
fn();

2、匿名函数自调用

(function () {
    console.log(“执行了”);
})();
复制代码

可以把函数看成一种数据

函数可以作为参数

function fun (fn) {    
fn();
}
function sayHi ()
 {    
console.log('ok');
}
fun (sayHi);复制代码

函数可以作为返回值

function fun () {
    return function () {
               console.log('ok');
           }
}

fun ()();复制代码

课后任务? 百度 匿名函数的调用方式

函数作用域及局部作用域

作用域

作用域:变量或者函数可以起到作用的区域
◇全局作用域(全局变量)
	1、在script标签中或者js文件中定义的变量,在任何地方都可以访问
	2、在函数声明变量不使用var关键字(不提倡)
◇局部作用域(局部变量)
	1、在函数内部定义的变量
	2、局部变量只能在定义变量的函数中使用
◇块级作用域(新版本中有块级作用域)
	{块级作用域}
	1、本质上块级作用域中的变量在外部不能访问
	2、但是在js中可以访问块级作用域的变量(证明js没有块级作用域)复制代码

作用域链

var a = 1;
function fn1 () {
	var a = 2;
	function fn2 () {
        console.log(a);
	}
	fn2();
}
fn1();

作用域链:
	当访问一个变量时,会现在本作用域中去寻找这个变量,若找不到则向上一级作用域中去找,一次类推,就形成了一个作用域链复制代码

作用域案例分析

function  f1 () {
       num = 123;
    function f2 () {
       num = 789;
       console.log( num );
    }
    f2 ();
} 
var  num = 456;

f1();复制代码

预解析

规则

什么是预解析,   在代码执行前,js引擎会提前将代码解析一下
对象------>  解析带有var定义的变量,和解析带有函数名的函数
1、js代码执行先执行解析
2、先进性变量提升,吧变量声明提升到当前作用域的最上面,只是提升声明,不提升赋值
2、函数提升,把函数声明提升到当前作用域的最上面,只是提升定义不调用
预解析案例分析:
1. 
var  a  = 25;
function abc () {
    alert(a);
    var a = 10;
}

abc();

2. 
console.log(a)
var a = 1;
function a () {
    console.log("aa");
}


console.log(a);


注意:
	 1. 如果函数名和变量名一样,函数优先

1. 
var  a  = 25;
function abc () {
    alert(a);
    var a = 10;
}

abc();

2. 
console.log(a)
function a () {
    console.log("aa");
}

var a = 1;
console.log(a);


注意:
	 1. 如果函数名和变量名一样,函数优先
     
     
 3.
var sum = 10;
fun ();
function fun () {
    console.log( num );
    var num = 20;
}

 4.
var  a  = 18;
f1();
function f1 () {
    var b = 9;
    console.log(a);
    console.log(b);
    var a = 123;
}

5.
f1();
console.log(c);
console.log(b);
console.log(a);
function f1 () {
    var a = b = c = 9;
    console.log(a);
    console.log(b);
    console.log(c);
}
复制代码

继续整理中!到此函数完毕。。。有问题留言


转载于:https://juejin.im/post/5d08a96ee51d4510bf1d6685

猜你喜欢

转载自blog.csdn.net/weixin_34409822/article/details/93181728