到底使用call还是apply?课程举得例子实际敲出来不对啊!
问题描述:
这节课老师为了说明fun2.apply(this, arguments);要使用apply而不是call时举了下面这个例子,是代码片段。因为这里a,b在代码中没有定义,自然得不到77这个老师讲的结果。
相关代码:
function fun1() {
fun2.apply(this, arguments)
console.log(this, arguments);
}
function fun2() {
alert(a + b);
}
fun1(33, 44);
尝试过的解决方式:
我尝试定义了全局变量a,b和在fun2中定义了局部变量a,b。运行结果是弹出NaN
相关代码:
// var a,b;
function fun1() {
fun2.apply(this, arguments);
console.log(this, arguments);
}
function fun2() {
var a, b;
alert(a + b);
console.log(a,b);
}
fun1(33, 44);
相关截图:
请问该怎么办?
23
收起
正在回答
1回答
同学你好,建议参考以下思路来理解这段代码:
首先,对于fun1函数,它是一个带参函数,调用时传入了两个参数:fun1(33, 44),而且在fun1函数中是使用arguments类数组对象来接收的这两个参数。
其次,fun2函数执行了以下代码:指定fun2函数的上下文,并传入了fun1函数的arguments作为参数:
fun2.apply(this, arguments) // arguments为类数组对象,所以使用apply
注:传参时,call用逗号罗列参数,apply要以数组的形式传递参数。
因此,fun2函数也是一个带参函数,定义时要传入形参a和b,函数中才可以使用这两个形参,否则报错,代码如下
function fun2(a,b) { console.log(a + b); }
同学的解决方案中,只是定义了变量a和b,并未赋值,所以运行结果为NaN。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星