什么是函数
实现特定功能的n条语句的封装体。只有函数是可以执行的,其他类型的数据不能执行。
为什么用函数
提高代码复用。便于阅读。
怎样定义函数
函数声明
function fn1() { //函数声明
console.log("fn1()");
}
fn1();
表达式
var fn2 = function () { //表达式
console.log("fn2");
};
fn2();
如何调用/执行函数
test():直接调用
obj.test():通过对象调用
new test(): new调用
test.call/apply(obj):临时让test成为obj的方法进行调用
var obj = {};
function test() {
this.xxx = 'hahaha'
}
//obj.test() 不能直接调用
test.call(obj); //obj.test() //可以让一个函数成为指定的任意对象进行方法调用
console.log(obj.xxx);
回调函数
定义一个函数,它没有被调用但最终却执行了的函数叫回调函数。
常见的回调函数
dom事件回调函数
定时器回调函数
ajax请求回调函数
生命周期回调函数
<button id="btn">
测试点击事件
</button>
<script type="text/javascript">
//dom事件回调函数
document.getElementById('btn').onclick = function () {
alert(this.innerHTML);
};
//定时器
//超时定时器 //循环定时器
//定时器回调函数
setTimeout(function () {
alert('到点了')
},2000)
IIFE
全称: ImmediateLy-Invoked Function Expression (立即执行函数表达式)
作用: 隐藏实现,不会污染外部(全局)命名空间,用来编写js模块。
(function () { //匿名函数自调用
var a = 3;
console.log(a+3); //6
console.log('something');
})();
var a = 4;
console.log(a); //4
(function () {
var a = 1;
function test() {
console.log(++a); //2
}
window.$ = function () { //向外暴露一个全局函数
return{
test:test
}
}
})();
$().test(); //$为一个函数,$执行后返回的是一个对象