1. javacommons

    No comment

    javacommons
Changes in body
Source | HTML | Preview
@@ -1,66 +1,73 @@
以下のコードを実行すると test2 関数の方が速いんですけど、みなさんこの理由わかりますか?
両方とも、add、sub という外部に公開したくない内部関数を定義する方法です。
```
-test1: 6.788ms
-test2: 3.052ms
+31
+31
+test1: 6.410ms
+test2: 3.527ms
```
```js
const COUNT = 1000000
-function test1() {
+function test1(x, y) {
function add(a, b) {
return a + b
}
function sub(a, b) {
return a - b
}
- return add(11, 22) + sub(33, 44)
+ return add(x, 11) + sub(y, 22)
}
var test2 = (function () {
function add(a, b) {
return a + b
}
function sub(a, b) {
return a - b
}
- return function() {
- return add(11, 22) + sub(33, 44)
+ return function(x, y) {
+ return add(x, 11) + sub(y, 22)
}
}());
+console.log(test1(10, 32))
+console.log(test2(10, 32))
+
console.time('test1')
-for (let i=0; i<COUNT; i++ ) test1()
+for (let i=0; i<COUNT; i++ ) test1(10, 32)
console.timeEnd('test1')
console.time('test2')
-for (let i=0; i<COUNT; i++ ) test2()
+for (let i=0; i<COUNT; i++ ) test2(10, 32)
console.timeEnd('test2')
```
上記はブラウザで動作させるプログラムを作る場合の名前空間汚染を避ける手順ですが、Node.js の場合は
```js:test3.js
function add(a, b) {
return a + b
}
function sub(a, b) {
return a - b
}
-module.exports = function() {
- return add(11, 22) + sub(33, 44)
+module.exports = function(x, y) {
+ return add(x, 11) + sub(y, 22)
}
```
としておいて
```js:main.js
+const COUNT = 1000000
var test3 = require('./test3')
+console.log(test3(10, 32))
console.time('test3')
-for (let i=0; i<COUNT; i++ ) test3()
+for (let i=0; i<COUNT; i++ ) test3(10, 32)
console.timeEnd('test3')
-console.log(add(111, 222)) // ← エラーになります。
+//console.log(add(111,222)) // ← エラーになります。
```
でOKなので楽なんですね。