?????????? Node.js ????? (2011-2012)?????????? PHP ????????????в???????? Node.js ????????????????±???鷳(PHP????????????)???????????????????????? node-supervisor ?????????????????????????????????????????????? PHP ?????????????????? Node.js ??????????????????????????
???????????????? session ?????????javascript:;" onClick="javascript:tagshow(event?? '%CA%FD%BE%DD%BF%E2');" target="_self">???????????????????????????е??????????????????????????????£????′????????????????????????(PHP??????????????? Node.js ????? cluster)????????????????????????? PHP ??? Node.js ???????????????????????а??????????????????????? Node.js ?????
?????????????????? require ?????顣?????????? Node.js ???????????鶼????? require ?????????????????????? require ?????????′????????? require ???????????£?
a.js
var express = require('express');
var b = require('./b.js');
var app = express();
app.get('/'?? function (req?? res) {
b = require('./b.js');
res.send(b.num);
});
app.listen(3000);
b.js
exports.num = 1024;
???????? JS ???д??????? a.js ??????????????? b.js ?е? 1024???????? b.js ????е???????????????? 2048?????????????????????? 1024??
????????????? require ???????′???require ????е?????м???????????????鵼??????????? require.cache ?С?require.cache ????? { } ??????????·??? key???????????????? value?????????????3????
a.js
var path = require('path');
var express = require('express');
var b = require('./b.js');
var app = express();
app.get('/'?? function (req?? res) {
if (true) { // ????????????
flush();
}
res.send(b.num);
});
function flush() {
delete require.cache[path.join(__dirname?? './b.js')];
b = require('./b.js');
}
app.listen(3000);
??????? require ?????? require ??????????? cache ?????????????????β??????????????????????? b.js ?????????????????
???????????????????????????????????????°汾?? node-supervisor??????????????У??????黳?????????????????? PHP ?? include ???????????? require ??????????顣??????????????? require ????????b.js??????????д????? var b = include(‘./b’)??????? b.js ??????? include ????????????£???????????μ????
????????????????????У?????????????????????????????????????????
????web.js
????var include = require('./include');
????var express = require('express');
????var b = include('./b.js');
????var app = express();
????app.get('/'?? function (req?? res) {
????res.send(b.num);
????});
????app.listen(3000);
??????????????????include????????????????????????????include.js?????????????????????????????μ? b.num??
???????????????????????????????? b = xx??????????д??????
????web.js
????var include = require('./include');
????var express = require('express');
????var app = express();
????app.get('/'?? function (req?? res) {
????var b = include('./b.js');
????res.send(b.num);
????});
????app.listen(3000);
???????????????????????????????????μ??μ????????????????????????????????????о????include????????????????????????????????????????????д???????????????[1]????????????????????????????——JavaScript?????á?
????JavaScript ??????????????????
???????????????????????????? JavaScript ?????????????????е?????????? C++ ??????????????????????
#include <iostream>
using namespace std;
void test(int &p) // ???????
{
p = 2048;
}
int main()
{
int a = 1024;
int &p = a; // ????????p???a
test(p); // ???ú???
cout << "p: " << p << endl; // 2048
cout << "a: " << a << endl; // 2048
return 0;
}
???? JavaScript ?У?
var obj = { name: 'Alan' };
function test1(obj) {
obj = { hello: 'world' }; // ????????obj
}
test1(obj);
console.log(obj); // { name: 'Alan' } // ?????????
function test2(obj) {
obj.name = 'world'; // ????????????????????
}
test2(obj);
console.log(obj); // { name: 'world' } // ???????
????????????? C++ ???????????????? ?? ??? JavaScript ?в???д????????????????????????μ?????????????????? ?? ??????????????????????????????????????“????”(????? C++ ?????ò?????????????? JavaScript ?????????????????????)???????????????????????Javascript ?о???????????????????????????????????μ????á?
????????????????????????????????????δ???
var obj = {
data: {}
};
// data ??? obj.data
var data = obj.data;
console.log(data === obj.data); // true-->data??????????obj.data
data.name = 'Alan';
data.test = function () {
console.log('hi')
};
// ???data???????????data???
console.log(obj) // { data: { name: 'Alan'?? test: [Function] } }
data = {
name: 'Bob'??
add: function (a?? b) {
return a + b;
}
};
// data???????????????????????????????????????????????????????????obj????
console.log(data); // { name: 'Bob'?? add: [Function] }
console.log(obj); // { data: { name: 'Alan'?? test: [Function] } }
obj.data = {
name: 'Bob'??
add: function (a?? b) {
return a + b;
}
};
// ?????obj.data????????????data????
console.log(obj); // { data: { name: 'Bob'?? add: [Function] } }
??????????????????????????data ???????????????????? obj.data????????? data ???????? obj.data ???????????????? JavaScript ???????????????? data = xxx ????????? obj.data = xxx??
???????????????? var data = obj.data ?????????е??????????
????|   Addr   |  ????  |
????|----------|--------
????| obj.data |  ???1 |
????|   data   |  ???1 |
??????????? data.xx ??????? obj.data ?????1??
??????????? data = xxx?????? data ???????????μ????????????????????(??????1)???????????????????????????
????|   Addr   |  ????  |
????|----------|--------
????| obj.data |  ???1 |
????|   data   |  ???2 |
?????? data ??????μ???????2??
?????????????????(???????????? C++ ??????)????? obj.data ????????μ????2???? JavaScript ?о???????????????????????п?????????μ????á????????????????????????????????????
????Node.js ?е? module.exports ?? exports
?????????????е? obj.data ?? data ???????? Node.js ?е? module.exports ?? exports ???????????????????? Node.js ?? require ???????????????
????function require(...) {
????var module = { exports: {} };
????((module?? exports) => { // Node.js ???????????????????????е????
????// ???м????????????????.
????function some_func() {};
????exports = some_func;
????// ?????????exports???????module.exports
????// ??module.exports??????{}
????module.exports = some_func;
????// ???????ò????????????exports
????})(module?? module.exports);
????return module.exports;
????}
???????????????
????console.log(module.exports === exports); // true
????// ???? exports ?????????? module.exports
????Node.js ?е? exports ?????????? module.exports ?????á???? exports ???????Node.js ???????????????????????????????鱾?????? module.exports ?????????????????????????
????exports = 1; // ??Ч
????module.exports = 1; // ??Ч
???????????????????????????????????????в??????????????????дmodule.exports.xx = xxx; ??????????д?????module.??
???????????????
??????????????£??????????????????????????
????var a = {n: 1};
????var b = a;
????a.x = a = {n: 2};
????console.log(a.x);
????console.log(b.x);
????????????????????????????????????????
????var a = {n: 1};   // ????a??????1{n:1}
????var b = a;        // ????b => a => { n:1 }
?????????:
????|   Addr  |     ????     |
????|---------|-------------|
????|    a    |  ???1 {n:1} |
????|    b    |  ???1       |
?????????????:
????a.x = a = {n: 2}; // (???1 ?????? a ).x = ???? a = ???2 {n:2}
????a ?????????????? JavaScript ????????????????????????????????????
????|    Addr   |          ????         |
????|-----------|-----------------------|
????| 1) a      |  ???2({n:2})         |
????| 2) ???1.x |  ???2({n:2})         |
????| 3) b      |  ???1({n:1?? x:???2}) |
????????????
????a.x ??(???2).x ==> {n: 2}.x ==> undefined
????b.x ??(???1).x ==> ???2 ==> {n: 2}
???????
????JavaScrip t??????????????????????????(????????)???????????????μ??????????μ??????????????????????????????????μ????????????????????????????????????????????μ?????????????????????????????????? Node.js ?????????????????????????????????????????????????????????????????棬????????????????ò????μ??????
????Node.js ????ж? JavaScript ????????????е??????????????? JavaScript ????????? module.exports ?? exports ???????????Щ???????????????????? JavaScript ???????????????????? Node.js ??????? ??Node.js ???????
?????[1]??
?????????????????????????е???????о???
?????? b = include(xxx) д??????????????????????ó??м??????????????д??
????????д?????????????????????????????????????? b().num ??μ?????????
??????????????м??????????????????????(?磺ctx.b = include(xxx))??
??????????????????±????????????????????????????????????????д?????й??????