Javascript 中的 var
来源:互联网 发布:国资商城 知乎 编辑:程序博客网 时间:2024/04/30 02:19
MelonCard发布了一篇文章——”how one missing var ruined our launch“(”少写了一个var毁了我的网站”),这篇文章是说MelonCard用Node.js做后台,因为出了一个小高峰——有50-100人注册,结果整个网站都不响应了,而且还出现了很多奇怪的问题。当他们调查到问题的要源的时候,他们发现下面的代码少写了一个var。
app.all(‘/apps/:user_id/status’,function(req, res, next) { // … initial = extractVariables(req.body);});
为什么inital少写一个var会引发这个问题呢?因为如果你不写var,这个局部的变量会被javascript当成全局变量,而这个变量又是一个函数,所以,当多用户并发的时候,这个本应该在不同用户下互不干扰的变量,成了各个用户共享的东西。试想,用户A的数据被用户B覆盖了,用户A和B的数据还没处理完,结果被新的C给搞乱了,程序的逻辑自然出现了问题。
在stackoverflow.com上有这么一个贴子说明了“有var”和“无var”的差别:
varfoo = 1;bar = 2; functiontest(){ varfoo = 1; // Local bar = 2; // Global // Execute an anonymous function (function() { varwibble = 1; // Local foo = 2; // Inherits from scope above (creating a closure) moo = 3; // Global }())}
上面这个示例告诉我们,如果你不用var,那么这个js引擎会一层一层地向上找父作用域中的变量,如果找到了,就用,如果找不到了,就会帮你定义一个全局的变量。上面这个例子充分说明了这一点。所以,如果你想在当前的作用域用声明变量,你一定要用var。这对于一些乱写javascript代码的程序员要注意了。这里再给大家介绍一个工具——
JSLint( http://www.jslint.com/ ),一个JS代码质量的分析工具,我们把上述stackoverflow的代码copy到JSLint这个在线工具中,我们可以看到下面的报告:
这个报告说明了源码中的那些变量的情况。
- Javascript中的Var浅谈
- Javascript 中的 var
- javascript中的var关键字
- javaScript中的 var
- JavaScript中的let与var
- Javascript中的var变量问题
- JavaScript中的let与var
- JavaScript中的关键字"VAR"使用详解
- JavaScript中的关键字“VAR”使用详解
- JavaScript:for循环中的i,加上var
- javascript中的var i = {};是什么意思
- javascript中的var i = {};是什么意思
- Javascript中的var self = this
- JavaScript ES6中的var、let、const
- javascript中的var,let和const
- JavaScript 中的 var that = this
- javascript var
- javascript var
- c++中stdlib.h头文件中包含哪些函数
- 【系统运维】POSIX pthread详解
- 返回类型-》引用
- 2012系统架构设计师考试大纲
- DB2 V9 默认帐户信息和服务启动信息
- Javascript 中的 var
- MongoDB笔记
- 字符串数组和字符串指针的区别
- __except() 的处理2 --- 全局展开
- C#教程第二课:表达式,类型和变量
- 分享快乐 笔记本如何变身AP共享上网?
- C#教程第三课:选择控制语句
- Jboss 5/6 Reading/File Encoding Problem
- gcc命令行详解