demo.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
//JS中的上下文
//context 执行环境的意思
//this
// this是右值(等号右边),不能在左边被赋值更改。要改变this的值要使用上下文调用模式(apply、call)
// function test(){
// this = 1; //this不能放在左边。
// }
//在上下文调用模式中,可以修改this的值,也就是可以修改函数的调用方式
//使用如下两个方法,可以修改函数调用上下文,也就是this的值。(修改函数的调用者)
//apply
//函数.apply(对象, 数组类型的参数列表) //后面的参数可省略,对象不能省
//call
//函数.call(对象,arg1,arg2,arg3...argn) //后面的参数可省略,对象不能省
var name = "张三";
function sayHello(a, b) {
console.log(this.name + "吃了"+ (a * b) + "个馒头");
}
var obj = {
name:"李四"
}
sayHello.apply(obj,[3,3]); //李四 第一个参数表示this的指向(函数调用者),第二个参数表示传给函数的参数数组(必须是数组类型)(可省略)
sayHello.call(obj, 2, 2); //李四 第一个参数表示this的指向(函数调用者),后面的参数表示传给函数的参数(可省略)
// sayHello.call(obj);
//call和apply的区别
//1.第一个参数都是要把this修改成的对象(函数的调用者)
//2.当函数需要参数的时候,那么apply是用数组进行参数的传递
//3.而call是使用单个的参数进行传递
//call用于确定了函数的形参有多少个的时候使用
//apply用于函数的形参个数不确定的情况
</script>
</head>
<body>
</body>
</html>