内置阵列-gn.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
指针,所以我很困惑。
谢谢你的帮助。
查看Array.prototype.map
的文档:其签名为:
arr.map(function callback(currentValue[, index[, array]]) {...} [, thisArg])
这正是您发现的内置代码中反映的内容,只是用V8的内部表示法表示。
receiver
是调用的接收方,即您在其上调用.map
的数组,在MDN示例中为arr
。
callbackfn
是回调函数,callback
作为MDN调用它
this_arg
是MDN所称的可选thisArg
。
该代码认为callbackfn
是可选的,这一事实并不反映(也不需要反映(规范;这是安全处理用户没有传递回调函数的情况的最方便的方法。重要的是产生的行为,即当callbackfn
不可调用或丢失时抛出TypeError
(这是"不可调用"的特殊情况,因为丢失的参数是未定义的,而未定义的不是函数(。