Ste*_*set 6 javascript minify google-closure-compiler
这种方法是什么?例如,来自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);
Run Code Online (Sandbox Code Playgroud)
对我来说,这似乎与简单输出完全相同
_.Q("gapi.auth.authorize", _.Ek.Ff);
_.Q("gapi.auth.checkSessionState", _Ek.MH);
...
Run Code Online (Sandbox Code Playgroud)
我假设不是.那有什么区别?
编译器确保"this"值正确:
a.f() // 'this' value is "a"
(0, a.f)() // 'this' is the default "this" value
Run Code Online (Sandbox Code Playgroud)
您在OAuth API中看到这一点的原因是代码使用"rescope global symbols"编译器传递.此过程将放置在全局范围内的符号放置在跨功能范围(IIFE)的对象上进行通信.所以这样的代码:
function f();
// some potentially late loaded code
f();
Run Code Online (Sandbox Code Playgroud)
变为:
(function(_){
_.f = function() {};
})(something);
(function(_){
_.f();
})(something);
Run Code Online (Sandbox Code Playgroud)
但是这里"f"的'this'值已从默认的'this'变为"_".为了防止发生这种变化,使用"(0,_.f)()"代替.
这是编译器可以改进的一个领域,因为即使在它可以确定函数体中没有使用"this"的情况下,它也会这样做.
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |