1. axios為什么既能在瀏覽器環境運行又能在服務器(node)環境運行?
因為:axios在瀏覽器端使用`XMLHttpRequest`對象發送ajax請求;在node環境使用`http`對象發送ajax請求。
問題來了:axios如何判斷這兩種環境呢?
```
var defaults.adapter = getDefaultAdapter();
function getDefaultAdapter () {
var adapter;
if (typeof XMLHttpRequest !== 'undefined') {
// 瀏覽器環境
adapter = require('./adapter/xhr');
} else if (typeof process !== 'undefined') {
// node環境
adapter = require('./adapter/http');
}
return adapter;
}
```
上面幾行代碼,可以看出:XMLHttpRequest 是一個 API,它為客戶端提供了在客戶端和服務器之間傳輸數據的功能;process 對象是一個 global (全局變量),提供有關信息,控制當前 Node.js 進程。原來作者是通過判斷XMLHttpRequest和process這兩個全局變量來判斷程序的運行環境的,從而在不同的環境提供不同的http請求模塊,實現客戶端和服務端程序的兼容。