js函數的反作用 對於treeshaking有很大影響數據結構
看一例子函數
import { cube } from './maths.js'; console.log( cube( 5 ) ); // 125
maths.js:code
export function square ( x ) { return x.a } square({ a: 123 }) export function cube ( x ) { return x * x * x; }
shaking操做後變成這樣對象
function square ( x ) { return x.a } square({ a: 123 }); function cube ( x ) { return x * x * x; } console.log( cube( 5 ) ); // 125
顯然沒有shaking乾淨,爲何呢,由於 return x.a 這句話有反作用io
還有哪些語句有反作用呢?console
反作用的函數不單單只是返回了一個值,並且還作了其餘的事情:ast
一、修改了一個變量 二、直接修改數據結構 三、設置一個對象的成員 四、拋出一個異常或以一個錯誤終止 五、打印到終端或讀取用戶輸入 六、讀取或寫入一個文件 七、在屏幕上畫圖
提一個問題,給出一段函數,有沒有方法透過ast 去判斷該函數有反作用呢?function