簡體   English   中英

避免javascript中的隱含全局變量(JSlint)

[英]Avoiding Implied globals in javascript (JSlint)

在編寫像這樣的代碼時,jsLint會抱怨隱含的全局變量:

var Test = (function(){
    var fnc = function(x){
        alert("pew: "+x);
    };

    return {
        fnc: fnc
    };
}());

Test.fnc("hat");

(具體來說,'隱含的全球:警報4')

什么被認為是避免這種情況的正確方法? 我的本能反應就是這樣,但我不相信它是'正確的':

var Test2 = (function(global){
    var alert = global.alert;

    var fnc = function(x){
        alert("pew: "+x);
    };

    return {
        fnc: fnc
    };
}(this));

Test2.fnc("hat");

編輯:共識似乎是問題不是我訪問全局的事實,更多的是我沒有告訴jslint全局變量是什么。 我會把這個打開一段時間以確定是否有其他人有輸入,然后我會選擇一個答案。

您可以在評論前添加文件

/*global alert $ document window*/

這通常是我告訴JSLint它不是暗示而是外部的。

這既不引人注目又告訴你的程序員你將這些變量聲明為外部變量,這對於更大的多文件程序是有用的。

使用jsLint的“假設瀏覽器”和“假設控制台,警報......”選項來使jsLint知道這些函數。 有關所有可用選項的列表,請參見http://www.jslint.com/lint.html#options

對於那些搜索JSHint的人來說,有一個選項“browser”可以設置為“true”並處理所有常見的全局變量。 “jquery”也是如此。 我從gradle-js-plugin源代碼中學到了這一點。

我認為你的方式是正確的(也是好的),但是沒有必要聲明global.alert ,只需使用global.alert("pew: "+x);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM