JavaScript高级:函数定义与this指向详解

需积分: 0 0 下载量 136 浏览量 更新于2024-08-05 收藏 401KB PDF 举报
在本篇JavaScript高级第03天笔记中,主要讨论了函数的定义与调用,以及`this`关键字的指向。内容包括三种函数定义方式:函数声明、函数表达式和`newFunction()`方法。其中,函数声明(通过`function`关键字)和函数表达式(匿名函数)是最常用的方式,而`newFunction()`由于执行效率低且书写不便,较少被采用。 1. **函数定义** - **函数声明方式**:使用`function`关键字创建命名函数,如`function fn() { ... }`,便于识别和复用。 - **函数表达式**:匿名函数,如`var f = function(a, b) { console.log(a + b); }`,在赋值时定义,没有明确的名字。 - **`newFunction()`方法**:创建函数的一种特殊形式,但不推荐,因为它会导致`this`指向问题,并且不如其他方式灵活。 2. **函数调用** - **普通函数**:直接调用如`fn();`,`this`指向全局对象或当前上下文。 - **对象方法**:作为对象属性调用,如`o.sayHi();`,`this`指向调用该方法的对象。 - **构造函数**:通过`new`关键字创建新实例时,`this`指向新创建的对象。 - **事件绑定**:通过`onclick`属性绑定,如`btn.onclick = function() {...};`,`this`指向触发事件的元素。 - **定时器函数**:`setInterval`中的函数,每秒执行一次,`this`取决于全局或上下文环境。 3. **`this`的指向** - **函数内部**:默认情况下,`this`指向调用函数的对象。在不同场景下,`this`的指向可能会发生变化: - 普通函数调用时,`this`指向全局对象或当前上下文。 - 对象方法中,`this`指向调用该方法的对象。 - 构造函数中,`this`用于创建新的对象实例。 - 事件处理函数中,`this`指向触发事件的元素。 - 定时器函数中,可能根据上下文不同而变化。 4. **改变`this`指向** - **`call()`方法**:接收一个目标对象作为第一个参数,强制将`this`指向该对象,常用于继承场景。 - **`apply()`方法**:类似`call()`,但接受一个数组作为参数,用于处理数组方法的多参数调用,`this`指向数组的第一个元素。 通过理解和掌握这些概念,可以更好地编写JavaScript代码,控制函数行为和`this`的指向,以适应各种编程需求。