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 去判断该函数有副作用呢?


webpack_devsave
16 声望0 粉丝

a