首先 polyfill是shim的一种.目的都是在没有相关API的环境上顺利执行代码
区别是:
shim:是js库, 用库定义的api去执行一些操作, 如jquery,$.ajax,底层用ActiveXObject或XMLHttpRequest实现,用户不直接用标准API,而是用库定义的api,具体环境判断和实现交给库.
polyfill: 用js模拟标准api,抹平环境差异,用户仍是使用标准api
如发现window.requestAnimationframe不存在,polyfill会用setTimeout覆写window.requestAnimationframe
polyfill的好处在于,可以动态监测浏览器版本,低版本加载,而在高本版浏览器可以不加载这段js,用户代码不修改直接可用
shim则是无论浏览器版本都要加载这段js,因为用的api是库定义的



