自运行
自运行:针对于匿名函数,当一个函数定义时直接运行(调用)
自运行的方式:
//a.用()将整个函数代码块括起来
// (function(){
// console.log("heihei");
// }());
//b.将函数对象用(括起来)
// (function(){
// console.log("haha");
// })();
//c.通过关键字或者运算符实现自运行
//1.void
void function(){
console.log("yingyingying");
}();
//2.!
! function(){
console.log("xixixixi");
}();
闭包
目的,在fun的函数体外,使用内部局部变量count
// function fun(){
// var count = 0;
// function fun1(){//子函数fun1可以使用父函数的count,让fun1作为fun的返回值,
// console.log(++count);//通过全局变量f与fun函数的返回值fun1进行绑定
// } //从而实现了将内部函数fun1的生命周期延长,同样count的生命周期也被延长
// return fun1; //我们可以通过f函数来操作fun的内部局部变量count
// }
//闭包:函数嵌套函数,被嵌套的函数称为闭包函数
//子函数可以作为父函数的返回值,通过外部全局变量与子函数进行绑定
//从而延长子函数的生命周期,父函数的局部变量的声明周期也同样被延长
//通过外部的全局变量可以间接操作子函数,实现对父函数局部变量在函数体外的访问
//闭包的缺陷:延长局部变量的生命周期,有可能会造成内存泄露
函数对象
函数定义的方式
//a.
// function fun(){
// console.log("heihei");
// }
//b.
// let fun1 = function(){
// console.log("xixi");
// }
//c.
//let fun2 = new Function(函数的参数,函数体);
// let fun2 = new Function("console.log('hahaha')");
// fun2();
// let fun3 = new Function("a","b","return a + b");
// console.log(fun3(1,2));
函数的内置对象
函数的内置对象:函数体内直接使用的对象
//this:
// a.与事件连用,代表触发事件的元素
// b.与普通函数连用,代表调用该函数的对象
// c.与构造方法连用,代表new出来的对象
//arguments:它是一个伪数组(只能访问不能使用API),存放着所有的实参
// function fun(){
// //console.log(arguments);
// for(let i=0; i<arguments.length; i++){
// console.log(arguments[i]);
// }
// }
// fun(1,2,3);
//定义不定参函数