Javascript中var引发的问题

开发 前端
MelonCard发布了一篇文章——”how one missing var ruined our launch“(”少写了一个var毁了我的网站”),这篇文章是说MelonCard用Node.js做后台,因为出了一个小高峰——有50-100人注册,结果整个网站都不响应了,而且还出现了很多奇怪的问题。当他们调查到问题的要源的时候,他们发现下面的代码少写了一个var。

MelonCard发布了一篇文章——”how one missing var ruined our launch“(”少写了一个var毁了我的网站”),这篇文章是说MelonCard用Node.js做后台,因为出了一个小高峰——有50-100人注册,结果整个网站都不响应了,而且还出现了很多奇怪的问题。当他们调查到问题的要源的时候,他们发现下面的代码少写了一个var。

  1. app.all(‘/apps/:user_id/status’, function(req, res, next) { 
  2.     // … 
  3.     initial = extractVariables(req.body); 
  4. }); 

为什么inital少写一个var会引发这个问题呢?因为如果你不写var,这个局部的变量会被javascript当成全局变量,而这个变量又是 一个函数,所以,当多用户并发的时候,这个本应该在不同用户下互不干扰的变量,成了各个用户共享的东西。试想,用户A的数据被用户B覆盖了,用户A和B的 数据还没处理完,结果被新的C给搞乱了,程序的逻辑自然出现了问题。

在stackoverflow.com上有这么一个贴子说明了“有var”和“无var”的差别:

  1. // These are both globals 
  2. var foo = 1; 
  3. bar = 2; 
  4.   
  5. function test() 
  6.     var foo = 1; // Local 
  7.     bar = 2;     // Global 
  8.   
  9.     // Execute an anonymous function 
  10.     (function() 
  11.     { 
  12.         var wibble = 1; // Local 
  13.         foo = 2; // Inherits from scope above (creating a closure) 
  14.         moo = 3; // Global 
  15.     }()) 

上面这个示例告诉我们,如果你不用var,那么这个js引擎会一层一层地向上找父作用域中的变量,如果找到了,就用,如果找不到了,就会帮你定义一个全局的变量。上面这个例子充分说明了这一点。所以,如果你想在当前的作用域用声明变量,你一定要用var。这对于一些乱写javascript代码的程序员要注意了。这里再给大家介绍一个工具——

 

JSLint( http://www.jslint.com/ ),一个JS代码质量的分析工具,我们把上述stackoverflow的代码copy到JSLint这个在线工具中,我们可以看到下面的报告:

这个报告说明了源码中的那些变量的情况。

原文链接:http://coolshell.cn/articles/7480.html

责任编辑:陈四芳 来源: 酷壳网
相关推荐

2015-04-13 09:21:00

JavaScript企业环境中巨大变革

2021-02-08 08:04:52

JavaScript语言OOP

2010-09-02 14:59:23

非授权DHCP

2018-09-05 11:03:37

Memcache频率限制

2009-07-01 18:24:00

微软驱动JSP网站开发

2020-09-30 08:06:39

JavaScript基础编程

2024-02-28 08:12:25

SSE接口代理

2010-01-07 11:21:25

2017-09-26 10:00:15

前端JS语法

2021-04-08 19:07:54

安全Spring Bootendpoint

2009-02-03 09:30:00

2021-11-23 09:00:59

消息堆积扩容RocketMQ

2021-10-13 11:00:27

数据泄露漏洞信息安全

2023-06-25 08:05:09

MySQL事务并发

2013-09-30 09:18:39

2009-06-30 16:08:19

性能问题代码写法

2021-09-07 10:57:30

物联网安全物联网IOT

2021-04-28 08:34:15

AirTag苹果精准定位

2020-06-23 08:26:43

深度学习气候变化AI

2015-04-16 09:20:02

动态路由协议RIP
点赞
收藏

51CTO技术栈公众号