狐的传说
我真的希望没有区别,但我看到测试的时间是2倍,或者这个简单的加法测试:NO_WINDOWWINDOW_STRINGWINDOW_PROPERTYadd = (a,b) => a+b;console.time('NO_WINDOW');for (var i = 0; i < 1000; i++); add(i, i+1); console.timeEnd('NO_WINDOW');console.time('WINDOW_STRING');for (var i = 0; i < 1000; i++); window['add'](i, i+1); console.timeEnd('WINDOW_STRING');console.time('WINDOW_PROPERTY');for (var i = 0; i < 1000; i++); window.add(i, i+1); console.timeEnd('WINDOW_PROPERTY');编辑:Phil在评论中指出,这似乎是一个奇怪的问题,其中第一个调用总是比后续调用花费更长的时间。console.timeEnd使用和适当的基准测试逻辑进行重现,在性能上没有显著的差异:performance.now()add = (a,b) => a+b;avg = (arr) => arr.reduce(add) / arr.length;let noWindow = [], windowProp = [], windowString = [], n = 1e6, start; start = performance.now();for (var i = 0; i < n; i++) window.add(i, i+1);windowProp.push(performance.now() - start);start = performance.now(); for (var i = 0; i < n; i++) add(i, i+1); noWindow.push(performance.now() - start); start = performance.now();for (var i = 0; i < n; i++) window['add'](i, i+1);windowString.push(performance.now() - start); let avgs = [ avg(noWindow), avg(windowString), avg(windowProp)];console.log(avgs);