我最近看到很多javascript代碼,看起來我錯了.在這種情況下,我應該建議哪種更好的代碼模式?我將重現我所看到的代碼和每個代碼的簡短說明:
代碼塊#1
該代碼不應該評估內部函數.程序員會因為代碼應該運行而感到困惑.
$(document).ready( function() { return function() { /* NOPs */ }});
代碼塊#2
程序員可能打算實現一個自調用功能.他們沒有完全完成實現(他們在嵌套括號的末尾缺少一個().另外,由于它們在外部函數中沒有做任何事情,所以嵌套的自調用函數可以剛剛嵌入到外部功能定義.
其實我不知道他們打算使用自調用函數,因為代碼仍然是錯誤的.但似乎他們想要一個自我調用的功能.
$(document).ready( (function() { return function() { /* NOPs */ }}));
代碼塊#3
再次,程序員似乎試圖使用自調用函數.但是,在這種情況下,它是過度的.
$(document).ready( function() { (return function() { /* NOPs */ })()});
代碼塊#4
一個示例代碼塊
$('#mySelector').click( function(event) { alert( $(this).attr('id') ); return function() { // before you run it, what's the value here? alert( $(this).attr('id') ); }});
評論:
我想我只是沮喪,因為它會導致人們不明白的蠕蟲,更改范圍界定,他們不是grokking,并通常使真正奇怪的代碼.這些都是來自某些教程的地方嗎?如果我們要教人們如何編寫代碼,我們可以教他們正確的方法嗎?
你會建議什么作為一個準確的教程向他們解釋為什么他們使用的代碼是不正確的?你會建議他們學習什么模式?
我看到的所有使我提出這個問題的樣本都是這樣的問題.這是我遇到的最新的特征片段,展示了這種行為.你會注意到,我沒有發布一個鏈接的問題,因為用戶似乎是相當新手.
$(document).ready(function() { $('body').click((function(){ return function() { if (counter == null) { var counter = 1; } if(counter == 3) { $(this).css("background-image","url(3.jpg)"); $(this).css("background-position","10% 35%"); var counter = null; } if(counter == 2) { $(this).css("background-image","url(2.jpg)"); $(this).css("background-position","10% 35%"); var counter = 3; } if(counter == 1) { $(this).css("background-image","url(1.jpg)"); $(this).css("background-position","40% 35%"); var counter = 2; } } })());});
以下是我建議他們重寫代碼的方法:
var counter = 1;$(document).ready(function() { $('body').click(function() { if (counter == null) { counter = 1; } if (counter == 3) { $(this).css("background-image", "url(3.jpg)"); $(this).css("background-position", "10% 35%"); counter = 1; } if (counter == 2) { $(this).css("background-image", "url(2.jpg)"); $(this).css("background-position", "10% 35%"); counter = 3; } if (counter == 1) { $(this).css("background-image", "url(1.jpg)"); $(this).css("background-position", "40% 35%"); counter = 2; } });});
請注意,我并不是說我的代碼在任何方面都更好.我只是刪除匿名中介功能.我實際上知道為什么這個代碼最初沒有做他們想要的,而且我并沒有重寫大家的代碼,但是我確實想要這個代碼至少有可用的代碼.
我認為一個真正的代碼示例將不勝感激.如果你真的想要這個特定問題的鏈接,請給我這個昵稱.他得到了幾個非常好的答案,其中我的中檔最好.
你的第一個例子是奇怪的.我甚至不知道這是否會以作者可能打算的方式工作.第二個簡單地將第一個包裝在不必要的括號中.第三個使用自調用函數,盡管由于匿名函數創建了自己的范圍(可能還有一個閉包),我不知道它有什么好處(除非作者在閉包中指定了其他變量 主站蜘蛛池模板: 金坛市| 沙湾县| 比如县| 新乡市| 侯马市| 即墨市| 来安县| 都兰县| 瑞昌市| 蓬溪县| 贞丰县| 怀来县| 九江县| 新平| 平罗县| 永仁县| 巴林左旗| 泸定县| 邹平县| 柳州市| 佳木斯市| 故城县| 林州市| 万山特区| 东兰县| 林芝县| 历史| 乡宁县| 鄂伦春自治旗| 锡林浩特市| 玉田县| 寻甸| 万全县| 新绛县| 香河县| 田林县| 三江| 静海县| 梅河口市| 策勒县| 阿尔山市|