2011-10-01 22 views
3

這是來自O'Reilly Javascript Patterns的書:如O'Reilly Javascript Patterns書中關於閉包和匿名函數所述,Javascript是否比以前更好?

JavaScript也是一種不同尋常的語言。它沒有類,而且函數是用於許多任務的第一類對象。最初, 語言被許多開發人員認爲是不足的,但在近些年更多 這些情緒已經改變。有趣的是,諸如Java和PHP之類的語言 開始添加諸如閉包和匿名函數之類的功能,這些JavaScript開發人員一直在享受 並認爲理所當然。

就是這樣。我真的不明白JavaScript是如何被認爲是「不足」的,現在不是,因爲Java或PHP等其他語言已經添加了閉包和匿名函數?他們不只是通用計算概念嗎?它們不是像Ruby這樣的其他語言嗎?所以我真的不知道Javascript現在是不是「缺陷」,因爲Java和PHP增加了閉包和匿名函數作爲它們的功能?這是爲什麼?

+0

它被認爲是「不足」的,因爲它與主要的編程語言不同,並且Javascript缺乏那些程序員習慣於Javascript所沒有的某些「特徵」。過去十年來,很多事情已經發生了變化,Javascript已經與網絡成熟了。與此同時,許多非常優秀的「程序員」開始認真對待網頁腳本,或者採用Javascript作爲一種嚴肅的語言來工作。瀏覽器成長起來,網絡變得有利可圖,並且進步發生了。我仍然認識一些嘲笑它的C程序員(以及PHP和Ruby)。誰在乎? –

+0

此外,「認爲不足」!=「實際上不足」。在瀏覽器環境中,許多C構造是完全不必要的,但Javascript在這些方面「缺乏」。它對瀏覽器無關緊要,但對於C/C++/Java程序員來說,它可能就是這樣的感覺。 –

回答

4

我認爲它指的是過去許多開發人員認爲JavaScript是一種「玩具」語言,只用它來完成快速的Web UI任務(如驗證等),而無需理解語言的真實工作方式。

近年來的JavaScript,如關閉,原型繼承等的「隱藏」功能已脫穎而出,現在人們正在JavaScript的更嚴重的「真實」的語言。

因此,JavaScript從來沒有真正「缺乏」,但人們可能認爲這是由於他們對語言的誤解。

+0

我想如果我們說Javascript具有一些高級功能,那麼這個功能可能是有意義的......但是,「缺陷」並不具備高級功能,僅僅是我們不能僅僅爲任何不好的語言添加閉包和匿名函數並稱它「現在很好」 –

2

我個人認爲這是一個糟糕的編輯工作。

該段應已經閱讀(粗體除了是我的,只是如何 讀它建議):

的JavaScript也是一個不尋常的語言。它沒有類,而且函數是用於許多任務的第一類對象。最初 語言是由許多開發者認爲缺乏,但更 近年來這些觀點已經改變由於更好和更一致的瀏覽器支持,通過各種ECMA版本和各種JavaScript框架的演變做了廣泛的工作。所有這些變化都是軟件產品不斷擴展到網絡的直接結果,並且對移動應用程序的輕量級語言的需求不斷增長(,這個可以有所爭議)

有趣的是,語言如Java和PHP開始增加功能 如閉包和匿名函數,其JavaScript開發人員 已享受和理所當然了一會兒。

0

多年來,JavaScript一直被認爲只是一種瀏覽器語言,對於需要比HTML和CSS提供更多動態性和/或靈活性的(簡單)功能。

JavaScript已經發展成爲一種語言和平臺,提供了強大的庫,這也消除了某些跨瀏覽器的不兼容問題。隨着這些圖書館的興起,社區實際上只開始學習如何使用一些強大的JavaScript概念,如關閉和原型繼承。因爲JavaScript的基礎語言非常簡單,大多數開發人員甚至不需要像學習Python,C或Java一樣學習它,所以它們還沒有被廣泛使用,甚至不被JavaScript開發人員所知,所有他們必須看的是教程,其中許多都沒有包含這些語言功能。

爲了提高流行度,JavaScript(官方ECMAScript)已經收到了幾個'版本',其中功能已添加到語言本身。 Latest edition(仍在開發中)將引入一些激進的新穎功能(考慮是類,模塊系統,迭代器,代數類型等),所以JS將變得更好,更結構化和更容易維護的語言。

JavaScript在服務器端也越來越受歡迎(node.js),並被證明是簡單,快速和足夠強大的語言來完成(幾乎)任何類型的工作。廣泛「濫用」節點可能是它的最佳特性 - JavaScript的異步性質。這並不是什麼新鮮事,許多語言都有異步庫,但正如Ryan Dahl在其節點上最早的演講中所說的那樣,JS是完美的。主要是因爲內置了關閉和其他概念。

因此,最終的答案是你所引用的書的作者很少表達他的想法或者完全錯誤。這是一種玩具語言,並不意味着像今天這樣用於各種用例。但它的發展,就像Java或PHP一樣(不要忘了PHP沒有OOP支持,現在看起來如此明顯,直到v5)。其他語言只是提供了一些好處,JavaScript在某些用例中證明更有效。總體而言,我的想法是JavaScript從一開始就沒有得到正確使用,這就是它被稱爲「不足」的情況。現在開發人員有機會探索其壯麗。

+0

我不會說其他語言已經從Javascript中獲得了好東西(比如閉包和匿名函數)。只是因爲Javascript也有他們並不意味着Javascript發起他們。我們如何修改和修改Javascript,以便最終它變成Ruby? –

+0

沒有說JS發起他們,遠離它。引用你已經粘貼了比較JavaScript到Java和PHP,所以我只停留在上下文中。但是必須說,JS使用閉包比我見過的任何其他語言都要廣泛得多。其他語言在適當的時候使用它們。隨着JS你幾乎在任何地方使用它們。 – usoban