JS自动填写分号导致的坑
2015-04-04 12:42
190 查看
JS中会自动清除句子和句子之间的空格以及tab缩进, 这样就可以允许用户编写的代码更加随性和更加可读, 在该行代码解析的时候如果该行代码可以解析, 就会在该行代码最后自动填写分号,如果该行代码无法解析就会把该行代码和下一句代码合并, 直到代码可以解析;
Js中如果一个语句以 ( [ / + - 开头,就有可能与上一句合在一起解析
也因为js会自动添加 “;” , 写js不注意就养成了不好的习惯, 代码有时候没事, 跑起来却出了错;
比如,少了一个分号就报错了;
我们期望他这么走:
实际上是这样的:
比如,这个也是因为少了一个分号
我们期望他这么走的:
实际上是这样的:
也因为js的自动添加分号机制,有下面的问题, 虽然很少人这么写:
我们期望的是这样的:
实际上是这样的:
js并不是所有的换行都添加分号, 只有缺少了分号无法执行的时候才添加分号,如:
也因为js的自动添加分号机制;
如果期望他正常执行,(汤姆大叔的例子);
如果有返回值, 比如return, break , continue的代码后面也不能换行, 导致维护的时候出了问题都无从找起;
所以,写js还是老老实实的加分号吧;
ok了,说了这么多,反正我不写分号O(∩_∩)O哈!
Js中如果一个语句以 ( [ / + - 开头,就有可能与上一句合在一起解析
也因为js会自动添加 “;” , 写js不注意就养成了不好的习惯, 代码有时候没事, 跑起来却出了错;
比如,少了一个分号就报错了;
var a y = 1+a (a+y).toString();
我们期望他这么走:
var a y = 1+a; (a+y).toString();
实际上是这样的:
var a y = 1+a(a+y).toString();
比如,这个也是因为少了一个分号
var a = 0 [a,2,3].forEach(function(){})
我们期望他这么走的:
var a = 0; [a,2,3].forEach(function(){})
实际上是这样的:
var a = [a,2,3].forEach(function(){})
也因为js的自动添加分号机制,有下面的问题, 虽然很少人这么写:
x = 0; y = 0; x ++ y;
我们期望的是这样的:
x = 0; y = 0; x++; y;
实际上是这样的:
x = 0; y = 0; x; ++y;
js并不是所有的换行都添加分号, 只有缺少了分号无法执行的时候才添加分号,如:
var a b = 3 console.log(b);
也因为js的自动添加分号机制;
function(){}() 这句话会变成这样: function(){}; ();
如果期望他正常执行,(汤姆大叔的例子);
// 下面2个括弧()都会立即执行 (function () { /* code */ } ()); // 推荐使用这个 (function () { /* code */ })(); // 但是这个也是可以用的 // 由于括弧()和JS的&&,异或,逗号等操作符是在函数表达式和函数声明上消除歧义的 // 所以一旦解析器知道其中一个已经是表达式了,其它的也都默认为表达式了 // 不过,请注意下一章节的内容解释 var i = function () { return 10; } (); true && function () { /* code */ } (); 0, function () { /* code */ } (); // 如果你不在意返回值,或者不怕难以阅读 // 你甚至可以在function前面加一元操作符号 !function () { /* code */ } (); ~function () { /* code */ } (); -function () { /* code */ } (); +function () { /* code */ } (); // 还有一个情况,使用new关键字,也可以用,但我不确定它的效率 // http://twitter.com/kuvos/status/18209252090847232 new function () { /* code */ } new function () { /* code */ } () // 如果需要传递参数,只需要加上括弧()
如果有返回值, 比如return, break , continue的代码后面也不能换行, 导致维护的时候出了问题都无从找起;
//如果这么写,实际上return的是空值; +function(){ return {a:1} }(); //这个才是对的 +function(){ return {a:1} }()
所以,写js还是老老实实的加分号吧;
ok了,说了这么多,反正我不写分号O(∩_∩)O哈!
相关文章推荐
- WebStrom Formatted Js 导致结尾分号自动消失问题记录
- .NET----使用母版页后,控件名称自动生成导致js无法正常操作.net控件的问题
- js解决chrome自动填写表单后input出现黄色背景的解决方案
- 使用母版页后,控件名称自动生成导致js无法正常操作.net控件的问题
- js 自动插入分号
- js 创建书签小工具并实现自动表单填写
- CodePen避免自动刷新导致的JS卡死
- js回车事件导致页面自动刷新解决方案
- listview中edittext复用导致下面的自动填写
- Qt自动填写表单并点击按钮,包括调用js方法
- js实现填写身份证号、手机号、准考证号等信息自动空格的效果
- java访问js自动填写表单
- .NET----使用母版页后,控件名称自动生成导致js无法正常操作.net控件的问题
- js实现填写身份证号、手机号、准考证号等信息自动空格的效果
- mysql建表自动填写当日时间
- 根据内容自动调整弹出窗口大小的JS解决方案 选择自 WeekZero 的 Blog
- 根据内容自动调整弹出窗口大小的JS解决方案
- (转贴)自动填写版权信息(方便了大家)
- JS自动关闭父窗口
- JS代码--HTML自动转为JS代码