一.函数调用的四种方法
(1)作为一个函数调用
var name = "windowsName";
function a() {
var name = "Cherry";
console.log(this.name); // windowsName
console.log("inner:" + this); // inner: Window
}
a();
console.log("outer:" + this) // outer: Window
(2)函数作为方法调用
var name = "windowsName";
var a = {
name: "Cherry",
fn : function () {
console.log(this.name); // Cherry
}
}
a.fn();
(3)使用构造函数调用函数
// 构造函数:
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// This creates a new object
var a = new myFunction("Li","Cherry");
a.lastName;
(4)作为函数方法调用函数
var name = "windowsName";
function fn() {
var name = 'Cherry';
innerFunction();
function innerFunction() {
console.log(this.name); // windowsName
}
}
fn()
二.this的指向
this永远指向最后调用它的那个对象, this永远指向最后调用它的那个对象
函数的作用域是在函数定义的时候决定的,函数的作用域是在函数定义的时候决定的
函数的作用域是在函数定义的时候决定的,函数的作用域是在函数定义的时候决定的
这三句话请朗读并背诵。
三.改变this指向的方法
改变this指向的方法有三种
(1)在函数内部使用let self = this
(2) 使用箭头函数
(3)使用new实例化函数
(4) 使用apply,call,bind
这是简单介绍一下 apply ,call ,bind 和他们之间的区别
apply: apply() 方法调用一个函数, 其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数
call: call()
方法使用一个指定的 this
值和单独给出的一个或多个参数来调用一个函数。
bind:
bind()
方法创建一个新的函数,在 bind()
被调用时,这个新函数的 this
被指定为 bind()
的第一个参数,而其余参数将作为新函数的参数,供调用时使用。
这里有一个面试常常考的点,实现一个apply 或 call 或bind函数。
这里附上一个链接:https://juejin.im/post/6844903476477034510这篇文章详细说了实现的思路。
上一篇:面试系列(二)js的基础知识