在builtins-array-gen.cc中
TF_BUILTIN(ArrayMap, ArrayBuiltinCodeStubAssembler) {
Node* argc =
ChangeInt32ToIntPtr(Parameter(BuiltinDescriptor::kArgumentsCount));
CodeStubArguments args(this, argc);
Node* context = Parameter(BuiltinDescriptor::kContext);
Node* new_target = Parameter(BuiltinDescriptor::kNewTarget);
Node* receiver = args.GetReceiver();
Node* callbackfn = args.GetOptionalArgumentValue(0, UndefinedConstant());
Node* this_arg = args.GetOptionalArgumentValue(1, UndefinedConstant());
InitIteratingArrayBuiltinBody(context, receiver, callbackfn, this_arg,
new_target, argc);
GenerateIteratingArrayBuiltinBody(
"Array.prototype.map", &ArrayBuiltinCodeStubAssembler::MapResultGenerator,
&ArrayBuiltinCodeStubAssembler::MapProcessor,
&ArrayBuiltinCodeStubAssembler::NullPostLoopAction,
Builtins::CallableFor(isolate(), Builtins::kArrayMapLoopContinuation));
}
我对callbackfn
的含义一无所知。
这是this_arg
这个指针吗?
但是在我看来,第一个参数应该是this
指针,所以我很困惑。
感谢您的帮助。
答案 0 :(得分:0)
看看Array.prototype.map
的{{3}}:其签名是:
arr.map(function callback(currentValue[, index[, array]]) {...} [, thisArg])
这正是您发现的内置内容所反映的内容,只是以V8的内部符号表示。
receiver
是呼叫的接收者,即您在.map
上调用arr
的数组,在MDN示例中。
callbackfn
是回调函数,callback
是MDN调用的函数。
this_arg
是MDN调用的可选thisArg
。
该代码将callbackfn
视为可选的事实并不能反映(也不需要反映)规范;这是安全处理用户未传递回调函数的情况的最便捷方法。重要的是产生的行为,即当无法TypeError
不可调用或丢失时抛出callbackfn
(这是“不可调用”的特例,因为缺少的参数是未定义的,未定义的是不是功能)。