gpt4 book ai didi

javascript - Closure Compiler 缩小代码中 (0, obj.method)(param1, param2) 的用途

转载 作者:数据小太阳 更新时间:2023-10-29 05:23:09 25 4
gpt4 key购买 nike

这种方法有什么用?例如,来自 Google OAuth API:

(0, _.Q)("gapi.auth.authorize", _.Ek.Ff);
(0, _.Q)("gapi.auth.checkSessionState", _.Ek.MH);
(0, _.Q)("gapi.auth.getAuthHeaderValueForFirstParty", _.Ek.Qe);
(0, _.Q)("gapi.auth.getToken", _.Ek.$f);
(0, _.Q)("gapi.auth.getVersionInfo", _.Ek.Wk);
(0, _.Q)("gapi.auth.init", _.Ek.gb);
(0, _.Q)("gapi.auth.setToken", _.Ek.Ym);

对我来说,这似乎与简单输出相同

_.Q("gapi.auth.authorize", _.Ek.Ff);
_.Q("gapi.auth.checkSessionState", _Ek.MH);
...

我假设不是。那有什么区别呢?

最佳答案

编译器确保“this”值是正确的:

a.f()  // 'this' value is "a"
(0, a.f)() // 'this' is the default "this" value

您在 OAuth API 中看到这一点的原因是代码使用了“rescope global symbols”编译器 channel 。此过程将原本会被引入全局范围以跨函数范围 (IIFE) 进行通信的符号放置到一个对象上。所以像这样的代码:

function f();

// some potentially late loaded code
f();

变成:

(function(_){
_.f = function() {};
})(something);

(function(_){
_.f();
})(something);

但是这里“f”的“this”值已经从默认的“this”变成了“_”。为了防止发生这种变化,使用了“(0, _.f)()”。

这是编译器可以改进的地方,因为即使在它可以确定“this”未在函数主体中使用的情况下,它也会这样做。

关于javascript - Closure Compiler 缩小代码中 (0, obj.method)(param1, param2) 的用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18626022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com