js函数的副作用 对于treeshaking有很大影响
看一例子
import { cube } from './maths.js';
console.log( cube( 5 ) ); // 125
maths.js:
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 这句话有副作用
还有哪些语句有副作用呢?
副作用的函数不仅仅只是返回了一个值,而且还做了其他的事情:
1、修改了一个变量
2、直接修改数据结构
3、设置一个对象的成员
4、抛出一个异常或以一个错误终止
5、打印到终端或读取用户输入
6、读取或写入一个文件
7、在屏幕上画图
提一个问题,给出一段函数,有没有方法透过ast 去判断该函数有副作用呢?
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。