2013年9月4日 星期三

javascript 行尾是否要加分號

http://darknuminous.pixnet.net/blog/post/27620166-javascript%E7%9A%84%E5%88%86%E8%99%9F%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85
斷行JavaScript會多幫你加一分號
所以下面的這句:
return
true;
等同於
return;
true;
這會造成大錯誤,切記不要隨便斷行。

http://stackoverflow.com/questions/444080/do-you-recommend-using-semicolons-after-every-statement-in-javascript
下面這情況會出錯
// define a function
var fn = function () {
    //...
} // semicolon missing at this line

// then execute some code inside a closure
(function () {
    //...
})();

http://stackoverflow.com/questions/1482999/utility-to-auto-insert-semicolons-in-javascript-source-code
文內推薦使用 http://www.jslint.com/ 去優化js

http://stackoverflow.com/questions/13572602/how-to-upgrade-jslint-in-aptana
在aptana (3以後) 直接使用jslint
1. 視窗 -> 偏好設定 -> Aptana Studio -> Validation

視窗 -> 偏好設定 -> 直接搜尋Validation
2. 勾選Build和Reconcile (不確定哪個所以兩個都勾)
3. 開啟問題視圖(但因為專案下有太多檔案之前沒照jslint規則走和內含樣板符號,所以會列出很多錯誤,所以還是關掉了)

ps. 匿名函數的三種寫法:
http://dancewithnet.com/2008/05/07/javascript-anonymous-function/
1. 函数字面量:首先声明一个函数对象,然后执行它。
(function(){
  alert(1);
} ) ( );
2. 优先表达式:由于Javascript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数。
( function(){
  alert(2);
} ( ) );
3. Void操作符:用void操作符去执行一个没有用圆括号包围的一个单独操作数。
void function(){
  alert(3);
}()
在console中下面代碼會出錯
(function() {
  console.log("test2");
})()
(function() {
  console.log("test1");
}())
test2
test1
但是把test1放到前面,只會出現test1就出錯了

ps.
使用jslint後遇到的問題,如何通過jslint驗證:
http://stackoverflow.com/questions/4979252/jslint-error-move-the-invocation-into-the-parens-that-contain-the-function
message: "Move the invocation into the parens that contain the function"
To pass JSLint's criteria, it needs to be written like this:
}(jQuery));
Though I think that particular criteria is a bit subjective. Both ways seem fine in my opinion.
(function () {})() makes a bit more sense to me since you wrap the full function, then call it
(function () {}()) looks like you're wrapping the result of the function call in a parens ...
- 結論 - 第一種方法雖然不會過,但是比較有sense

The “unexpected ++” error in jslint
http://stackoverflow.com/questions/3000276/the-unexpected-error-in-jslint
just do i += 1

"use strict";
http://stackoverflow.com/questions/1335851/what-does-use-strict-do-in-javascript-and-what-is-the-reasoning-behind-it
http://peihsinsu.blogspot.tw/2012/04/javascript-use-strict.html
use strict是ECMA-262 Edition 5定義的新語法,表示要用嚴格的Javascript語法來執行,有一些過去慣用的寫法就會出錯,例如使用變數前沒有用var宣告。
use strict主要是影響他所在的scope,如果在函數中使用,並不會讓global scope以及其他未使用的函數變成use strict。

沒有留言:

張貼留言