1. javacommons

    No comment

    javacommons
Changes in body
Source | HTML | Preview
@@ -1,65 +1,66 @@
以下のコードを実行すると test2 関数の方が速いんですけど、みなさんこの理由わかりますか?
両方とも、add、sub という外部に公開したくない内部関数を定義する方法です。
```
test1: 6.788ms
test2: 3.052ms
```
```js
const COUNT = 1000000
function test1() {
function add(a, b) {
return a + b
}
function sub(a, b) {
return a - b
}
return add(11, 22) + sub(33, 44)
}
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)
}
}());
console.time('test1')
for (let i=0; i<COUNT; i++ ) test1()
console.timeEnd('test1')
console.time('test2')
for (let i=0; i<COUNT; i++ ) test2()
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)
}
```
としておいて
```js:main.js
var test3 = require('./test3')
console.time('test3')
for (let i=0; i<COUNT; i++ ) test3()
console.timeEnd('test3')
+console.log(add(111,222)) // ← エラーになります。
```
でOKなので楽なんですね。