函数的定义方式
// 1. 自定义函数(命名函数)
function fn() {};
// 2. 函数表达式 (匿名函数)
var fun = function() {};
// 3. 利用 new Function('参数1','参数2', '函数体');
var f = new Function('a', 'b', 'console.log(a + b)');
f(1, 2);
// 4. 所有函数都是 Function 的实例(对象)
console.dir(f);
// 5. 函数也属于对象
console.log(f instanceof Object);
调用方式
// 函数的调用方式
// 1. 普通函数
function fn() {
console.log(this); // window
console.log('我是普通函数');
}
// fn(); fn.call()
// 2. 对象的方法
var o = {
sayHi: function() {
console.log('我是对象的方法');
}
}
o.sayHi();
// 3. 构造函数
function Star() {};
new Star();
// 4. 绑定事件函数
// btn.onclick = function() {}; // 点击了按钮就可以调用这个函数
// 5. 定时器函数
// setInterval(function() {
// console.log(this);
// }, 1000); //这个函数是定时器自动1秒钟调用一次
// 6. 立即执行函数
(function() {
console.log(this); // window
console.log('人生的巅峰');
})();
// 立即执行函数是立即执行不用手动调用自动调用
</script>
还有箭头函数
<script type="text/javascript">
// 箭头函数是用来简化函数定义语法的
// const fn = () => {
// console.log(123)
// }
// fn();
// 在箭头函数中 如果函数体中只有一句代码 并且代码的执行结果就是函数的返回值 函数体大括号可以省略
// const sum = (n1, n2) => n1 + n2;
// const result = sum(10, 20);
// console.log(result)
// 在箭头函数中 如果形参只有一个 形参外侧的小括号也是可以省略的
// const fn = v => {
// alert(v);
// }
// fn(20)
// 箭头函数不绑定this 箭头函数没有自己的this关键字 如果在箭头函数中使用this this关键字将指向箭头函数定义位置中的this
function fn () {
console.log(this);
return () => {
console.log(this)
}
}
const obj = {name: 'lisi'};
const resFn = fn.call(obj);
resFn();
</script>
函数内部的this指向
普通函数调用--------------this指向window
构造函数调用--------------this指向实例对象,原型对象里面的方法也指向实例对象
对象方法调用--------------this指向该方法所属对象
事件绑定方法--------------绑定事件对象
定时器函数-----------------this指向window
立即执行函数--------------this指向window