2014-04-23 46 views
1

我剛開始使用JSlint來查看我是否可以改進我的代碼。這相當...迂腐,但非常有用。JSlint - 'function'在被定義之前被使用'

我目前有一個問題,即函數被調用,但jslint告訴我,它尚未定義。

該函數是一個簡單的隨機數生成函數,它存儲在一個通用的'幫助文件'中。我不希望或看到有需要將此函數複製到每個調用它的文件中,但有時會破壞幫助程序文件的目的:)

是否還有其他我缺少的東西?我忍不住想我正在做一個業餘的錯誤,但看不到它。

錯誤被呈現在這條線:randomNum = random_num(layerDetails.length);

和random_num功能很簡單:

function random_num($value) { $result = Math.floor(Math.random() * $value); return $result; }

感謝您的幫助。我想讓jslint給我這麼簡單的健康證明。

+0

在JSLint的頁面的底部,就在選項下,是一個白色的盒子。列出您在那裏調用的任何外部或全局函數。順便說一句,道格拉斯克羅克福德有一些很好的想法,但並非所有人都必然是黑人和白人。您可能想看看[JSHint](http://www.jshint.com/)作爲替代方案。 –

+0

恩......我從終端上運行它。 :) - 我正在使用節點掃描項目文件夾中的所有文件,有沒有其他方法? – null

+0

您也可以簡單地將所有JS文件連接起來,然後將jsLint連接成文件。這模擬了瀏覽器將所有腳本加載到給定頁面時發生的情況,並且這樣當您在瀏覽器中實際可用時,所聲明的所有函數都將可用,以便JSLint獲得更清晰的總體圖像。 – jfriend00

回答

2

您有一個全局函數,它也是一個全局變量。全局通常是一件壞事,因爲它們吞噬了命名空間並導致了命名衝突。

如果你不擔心,你可以讓JSLint的知道哪些全局您是通過添加以下注釋到每個頂部使用文件,你掉毛:

/*globals random_num, $ */ 

我添加$證明您可以提供全局列表。

但是,由於您使用節點,我建議將此添加到Utils模塊。 JSLint不會抱怨這件事,因爲您將使用var宣佈該模塊。

utils.js

module.exports = { 
    random_num: function random_num($value) { 
    $result = Math.floor(Math.random() * $value); 
    return $result; 
    } 
}; 

在別處:

var utils = require('./utils'); 
utils.random_num(); 
+0

謝謝!我使用類似的方式來避免循環中的++問題。我知道一個全局變量很糟糕,但是這個函數......當然,最好將它放在全局可用的一個地方,而不是將它放在許多單獨的文件中?你能解釋一下utils模塊的意思嗎? – null

+0

將代碼組織到模塊中通常會更好。我總是試圖瞄準最大可能大小的名稱空間,通常它會減少在任何給定的上下文中「用完」變量名稱的可能性。 – Jackson

+0

增加了utils模塊示例。 – Jackson

相關問題