JavaScript基础入门(4)|青训营笔记

45 阅读2分钟

本次没有课程笔记,今天有一点事情没有及时更新知识体现,但提升部分照样更新,依旧是有关函数的内容。

提升笔记

Function方法

Function.prototype.apply

在一个对象的上下文中应用另一个对象的方法;参数能够以数组形式传入。 Function.prototype.bind()

bind()方法会创建一个新函数,称为绑定函数。当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为this,传入bind()方法的第一个 Function.prototype.call()

在一个对象的上下文中应用另一个对象的方法;参数能够以列表形式传入。

const person1={firstName:'三',lastName:'张'};
console.log(getFullName.call(person1));// 张三

const logger ={
    type:'info',
    count:0,
    log:function(message){
        console[this.type](message,++this.count);
    },
}

//call apply,bind 不能绑定this上下文,还能绑定部分参数
setInterval(logger.log.bind(logger,'heart beat'),1000);
Function类

函数是Function类的实例。我们可以用Function类动态创建函数对象。

 const sum = new Function('a', 'b', 'return a + b');

 console.log(sum(2, 6));
 
 // expected output: 8

Function 创建的函数只能在全局作用域中运行。

语法

new Function ([arg1[, arg2[, ...argN]],] functionBody)

arg1, arg2, ... argN 是被函数使用的参数的名称必须是合法命名的。

functionBody是一个含有包括函数定义的 JavaScript 语句的字符串。

在使用call()方法时,传递给函数的参数必须逐个列举出来

function sum(num1, num2){
 return num1 + num2;
}
function callSum(num1, num2){
 return sum.call(this, num1, num2);
}
alert(callSum(10,10)); //20
apply()方法接收两个参数:一个是在其中运行函数的作用域,另一个是参数数组

function sum(num1, num2){
 return num1 + num2;
}
function callSum1(num1, num2){
 return sum.apply(this, arguments); // 传入 arguments 对象
}
function callSum2(num1, num2){
 return sum.apply(this, [num1, num2]); // 传入数组
}
alert(callSum1(10,10)); //20
alert(callSum2(10,10)); //20

基础入门(4)完