nodejs php7,phper写nodejs走过的坑

PHP是世界上最好的语言。

写了差不多半年的nodejs,本质上还是在被php的惯性影响。谁叫php写了6年多呢。nodejs让我隐藏了笑话中的尴尬:

你们php程序员是不是想钱想疯了,写的代码里面都那么多$

对const的误解

在php的const一旦定义不可以修改,无论是什么变量。但是nodejs不一样

const a = 1; //不可修改

const b = ['1'];//可以对数组中的元素进行添加、修改、删除

b.push('2');

class instance{

}

const c = new instance;

c.id = '';//可以对实例的属性进行操作

所以在nodejs里面被定义了const的变量,只是不能再用=

块作用域

起初对这个块变量了解没有那么深刻,差不多也就是php中局部变量的意思吧,一个简单的例子让我瞬间感受到了区别

function a() {

for (let i = 0; i < 10; i++) {}

i; //会报未定义的错误

}

a();

原来这个i只在 for循环中起到了作用。

变量生存周期

php的大多框架一个请求一个进程,所以对于变量的生存周期很容易理解,而且全局变量是请求间隔离的。但是nodejs的全局变量是不隔离的,为了进行对一个请求的变量进行有效隔离,进而有了上下文的概念。

对于php来说,获取当前用户,我们一般的做法可以用单例模式去保存当前用户。然后在使用的是获取当前单例里面的用户即可。

nodejs里面要是像php一样做,在没有并发的情况下,是没有问题的。为什么?

我们知道实现单例要依赖类的静态变量,而类的静态变量不属于实例。而类的静态变量的生存周期是存在是nodejs程序运行的整个生命期间,作为各个请求都可以访问并可以进行改变的。

举个例子:有A、B两个用户同时发起相同的请求。服务器先收到了A的请求,单例里面记录的用户是A,但在请求里面有一个相对较长时间的数据库操作需要等待,而就在这等待的过程中,单例里面记录的用户变成了B,而A请求还没有结束,而最终导致A操作的记录被记录在了B用户之下。

在nodejs里面实现单例模式特别简单

//在A文件里面,然后在其他文件中引用即可。

class A {

}

module.exports = new A;

题外:其实有上下文这个概念的语言都会面临nodejs这个问题,nodejs并不是特例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值