今天在看css-loader
源码的时候,看到很多如下形式的函数调用:
// 顶部的导入
var _loaderUtils = require("loader-utils");
var _utils = require("./utils");
// css-loader dist/index.js:35
const options =?(0, _loaderUtils.getOptions)(this)?||?{};
// css-loader dist/index.js:44~46
if ((0, _utils.shouldUseModulesPlugins)(options.modules, this.resourcePath))?{
plugins.push(...(0, _utils.getModulesPlugins)(options, this));
}
// css-loader dist/index.js:132~134
const importCode =?(0, _utils.getImportCode)(this, exportType, imports, esModule);
const moduleCode =?(0, _utils.getModuleCode)(result, exportType, sourceMap, apiImports, urlReplacements, icssReplacements, esModule);
const exportCode =?(0, _utils.getExportCode)(exports, exportType, localsConvention, icssReplacements, esModule);
据观察基本就是在调用外部导入模块的方法时,都用形如(0, _obj.func)(params)
的方式来调用。
请问这是出于什么考虑?
Update:
找了css-loader
的真正源码(上面是在node_modules
里看的dist
文件),如下:
import {
shouldUseModulesPlugins,
// ...
} from './utils';
const rawOptions = getOptions(this);
if (shouldUseModulesPlugins(options)) {
plugins.push(...getModulesPlugins(options, this));
}
都是正常的写法,dist
内文件是babel
转译后输出的,对比之后觉得应该就是下面两个回答说的 “为了获得obj.func
引用但this
不指向obj
” ,以确保和原代码调用方式一致,且(0, func)()
的方式比用var tmp = obj.func; tmp()
更简洁且节省了一个变量。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…