顯示具有 JSHint 標籤的文章。 顯示所有文章
顯示具有 JSHint 標籤的文章。 顯示所有文章

2013年7月28日 星期日

那些年 我們誤會很深的 Javascript 變數作用域

自從上次學會第一次惹惱隊友就上手 以 JSHint 為例之後

其中有話這麼說:請注意這貨十分殘暴 在惹惱隊友 會先惹惱自己

毫無疑外馬上就中槍





故事是這麼發生的

身為一個 C# 嫻熟的 PG 這段 Foo 是用來表示奇偶數的 很合理吧

正如我剛才所說 身為一個 C# 嫻熟的 PG 把剛剛的 Foo 用 JS 翻寫成這樣 也很合邏輯

說時遲那時快杰哥 JSHint 來了





花了發科 為啥這樣寫是錯的 從古至今一路走來 都這樣寫 難到小弟我錯了嗎?

stackoverflow教教你:http://stackoverflow.com/questions/810313/what-is-the-reason-behind-jslint-saying-there-are-too-many-var-statements





原來 Javascript 是沒有 block scope 的

也就是說 只要在同一個 function 裡面的變數

不管是在 if for while 還是蝦米小 的 block 之中

都能在外部存取變數

也就是說 以這個案例來看 即便離開 for 迴圈 下面仍然抓的到 result 甚至 loop 用的 i 變數

而 Javascript 變數的作用域 唯一的分水嶺 在於這個 var

沒有宣告 var 的變數 會是全域變數 全世界都抓的到他

有宣告 var 的變數 只有在該 function 內可以使用

但是 只要是在 function 內 是無視任何 block 的

所以 JSHint 認為 明明這些變數 並非具有 block scope 約束 但是卻以相似的方式撰寫 是一種誤導行為 所以他不允許





最後 依照 JSHint 拉比法典 的規則 必須寫成這樣 只有 一個 var 且最好在 function 最上面 避免他說 我們在宣告前就使用變數

但是老實說 即使是之前的寫法 程式真的會因此出錯嗎 或者在維護上 會讓人搞不清楚嗎 那也不見得

老話一句 工具幫助我們檢查細節 但是 是否要 100% 服從 我想就看誰是杰哥了

2013年7月24日 星期三

第一次惹惱隊友就上手 以 JSHint 為例

身為一個被全世界誤解最深的程式語言(但是最流行)

自由奔放 脫韁野馬 難以馴服 也是常有的

這樣也可以那樣也可以 有時候很方便 但是有時候是噩夢

尤其是 team work 的時候

即便有訂定 coding style

但是人類豈是能相信的動物

在連自己都無法相信的前提之下 我們需要靠工具來惹惱隊友





燈燈燈~JSHint!!!

只要把 CODE 貼上來他就會「嚴格」的幫你把關

讓你的 CODE 有足夠的資格蓋上 CAS 電宰豬





但是手動一一貼過來檢查未免搞剛

更別說人類不可相信呀!!

燈燈燈~JSLint.VS2012!!!

請注意這貨十分殘暴 在惹惱隊友 會先惹惱自己





工具/擴充功能和更新 可以取得這個整人玩具

琳瑯滿目的調教(?)設定

第二頁 記得選到 JSHint

開始調教(?)前記得把一些 Library 檔案都勾選 Skip on build 否則...很可怕不要問

調教(?)前

華麗的鞭打

調教(?)後

CAS 優良認證