TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

John Resig: JavaScript as a First Language

306 点作者 fogus超过 13 年前

40 条评论

jashkenas超过 13 年前
For the interested (and with the caveat that I definitely would not suggest it for the Khan Academy's purposes), CoffeeScript does try to address all of the issues that John raises in his post.<p>Type Coercion: There is no `==` in CoffeeScript. You usually write `if x is y` in order to be particularly clear, but if you're in the mode of most other scripting languages, and you write `if x == y`, it will compile to `if (x === y) {` in JavaScript.<p>John's note about `x == null` being the only useful application of double equals is quite true, and something that CoffeeScript provides in the existential operator: `if x?`<p>Falsy Values: The existential operator helps you ask the question "Does this value exist?" (Is this value not either null of undefined?) ... which covers many of the use cases for having saner falsy values in JavaScript. For example, instead of JS' `if (string) {` ... where the string may be the empty string, you have `if string?`<p>Function Declarations: JavaScript having function declarations, function expressions, and named function expressions as three functionally different things is indeed a wart on the language. Especially so because JavaScript having a single type of function is one of the beautiful aspects that shines in comparison to languages like Ruby, where you have methods, blocks, procs, lamdas, and unbound methods -- all of which behave in slightly different ways. CoffeeScript only provides JS's function expressions.<p>Block Scope: This is a tricky one, because unfortunately it can't be emulated in a performant way in JavaScript. So all that CoffeeScript can provide is the "do" keyword, which immediately invokes the following function, forwarding arguments. So, if a regular "for" loop looks like this:<p><pre><code> for item, index in list ... </code></pre> A faux-block-scoped "for" loop would look like this:<p><pre><code> for item, index in list do (item, index) -&#62; ...</code></pre>
评论 #3379537 未加载
评论 #3379935 未加载
评论 #3379215 未加载
评论 #3379085 未加载
评论 #3380349 未加载
评论 #3380502 未加载
评论 #3379622 未加载
评论 #3379776 未加载
评论 #3379557 未加载
评论 #3379623 未加载
评论 #3379741 未加载
absconditus超过 13 年前
Javascript is an absolutely horrible language to use for such purposes. There are far too many gotchas. See the following for numerous examples:<p><a href="http://stackoverflow.com/questions/1995113/strangest-language-feature?tab=votes&#38;page=1" rel="nofollow">http://stackoverflow.com/questions/1995113/strangest-languag...</a>
评论 #3379113 未加载
评论 #3378802 未加载
评论 #3379077 未加载
评论 #3378959 未加载
评论 #3378809 未加载
评论 #3378970 未加载
评论 #3378922 未加载
评论 #3378804 未加载
评论 #3378788 未加载
laconian超过 13 年前
I'm a fairly experienced programmer and JS still drives me up the wall. The implicit casting and inconsistent operator overloads have led to many unhappy visits to Stack Overflow to see just WTF my browser is doing. I can't imagine the experience being any better for newbie programmers! Even simple things, like bitwise operators, are basically broken unless you take care to ensure that your variables are coerced to whole numbers, because all numerics are f%!#^&#38;ing floating point numbers...<p>Given that the language is such a mess, I think it would induce a new programmer to compartmentalize their JS learnings as a bunch of special case hacks instead of discovering broad language principles that are applied consistently across the language.
评论 #3379758 未加载
评论 #3381431 未加载
IanMechura超过 13 年前
I have argued JS as an intro language for years. My main argument has been not based on language features which I feel are unimportant in forming a young programmers mind but rather in the complete lack of barriers to getting started.<p>Take for instance python( my personal language). At a minimum you need python installed on the computer. Then you need to deal with issues such as the PATH and PYTHON_PATH. Also you have to understand package naming and import scheme.<p>With JS you only need a .html text file on the desktop.<p>Write code, save, double click, results. It is something that anyone who has even seen a computer can understand.<p>Particularly if the student has not had much experience in computers in general, things like paths, imports, file system knowledge and command line interfaces can be a barrier to learning code. You will eventually need to learn all of the things above to be a programmer but why bore a child or teenager with the details of a file system or command line when you could be showing them how to code animations on a web page.<p>I will admit, that struggling with run time environment, compilers and class path issues made me into better engineer sooner, but I already had a passion for what I was doing.
评论 #3379410 未加载
extension超过 13 年前
Yeah, JavaScript will break their impressionable young minds. But you know what? Programming in general will break their minds. Programming is fucked up from any perspective. If they learn a good language first, they will go crazy trying to figure out why nobody is using it. Might as well teach them a language that lets them get stuff done in the real world, while preparing them for the ugliness ahead. They can learn the good language later.
sirchristian超过 13 年前
I support using JavaScript as a first language. If for nothing else there are millions of code snippets just a short "right click -&#62; view source" away. Granted these may not be the most ideal examples, but it enables tinkering. One thing that always frustrated me about the "easy" languages to learn (Python, Ruby, etc) is you still have to figure out how to download something and then the first programs just write out text to a console window. It's hard to see at first how learning one of the "easy" languages translates into building cool stuff.<p>Having access to such a vast array of samples, plus something like Khan Acadamy teaching the "right way" is just awesome to me.
noelwelsh超过 13 年前
Reading this I reminded of the saying "when you have a hammer everything looks like a nail". It's not surprising to see John Resig leaning towards using Javascript. There is a lot of research into teaching introductory programming. It would be nice to see some of that referenced in making the decision. You know, base it at least in part on science rather than just opinion.
angelbob超过 13 年前
I am <i>so</i> looking forward to a huge army of newly-trained programmers who view <i>prototype-based</i> inheritance as the default and classical inheritance as weird.<p>Similarly, I look forward to a whole set of various modules and libraries to graft prototype-based inheritance onto existing languages like Ruby...<p><i>cackle</i>
评论 #3379709 未加载
agentultra超过 13 年前
I think it'd be more apt to choose something like Racket. It has all the desirable characteristics the author finds attractive in Javascript. It is an integrated environment and includes libraries and extensions for teaching basic programming. Unlike Javascript it isn't married to the browser (and by extension, the DOM) and doesn't suffer from a variety of syntactical discrepancies. It even comes with a free book for teaching the fundamentals of computer programming and computation.<p><a href="http://docs.racket-lang.org/quick/" rel="nofollow">http://docs.racket-lang.org/quick/</a><p><i>Update</i>: All of the desire-able characteristics except for being a resume-search keyword with a high hit frequency. IMO, learning how to program and getting a job are orthogonal.
yuvadam超过 13 年前
tl;dr - they picked JS due to its <i>"ubiquity, desirability in the larger workforce, lack of prior installation requirements, and ability to create something that's easy to share with friends"</i><p>I find that explanation disturbing. Why not start from a language that teaches the basics of the common programming paradigms, such as OOP (Java) or FP (Scheme)?
评论 #3378850 未加载
评论 #3378920 未加载
评论 #3379184 未加载
评论 #3378819 未加载
评论 #3379082 未加载
评论 #3379662 未加载
评论 #3379649 未加载
njonsson超过 13 年前
All decent suggestions. I quibble with this, though:<p><pre><code> // Don't do this: function getData() { } // Do this instead: var getData = function() { }; </code></pre> The assignment is righteous, but by omitting the function’s name, you make stack traces more difficult to follow. Better this instead:<p><pre><code> var getData = function getData() { };</code></pre>
评论 #3379247 未加载
评论 #3380783 未加载
评论 #3379473 未加载
edtechdev超过 13 年前
The language picked doesn't matter as much as what you can (quickly) do with it.<p>But personally, for high schoolers, I would start with Scratch ( <a href="http://scratch.mit.edu" rel="nofollow">http://scratch.mit.edu</a> - scratch 2 will work in the browser) and then perhaps Processing.js or a game development site/tool like <a href="http://html5.yoyogames.com/" rel="nofollow">http://html5.yoyogames.com/</a> <a href="http://www.scirra.com/construct2" rel="nofollow">http://www.scirra.com/construct2</a> <a href="http://www.playmycode.com/" rel="nofollow">http://www.playmycode.com/</a> <a href="http://pixieengine.com/" rel="nofollow">http://pixieengine.com/</a><p>There is actual research on how to teach kids programming and computer science concepts. <a href="http://csunplugged.org/" rel="nofollow">http://csunplugged.org/</a> doesn't use any software at all to teach concepts like binary numbers, sorting, etc.
评论 #3379126 未加载
firefoxman1超过 13 年前
Before I even read the article, I was pretty sure that with a title like that there is going to be lots of debate from the CS people. They do raise some good points, but here's my 2 cents.<p>Besides a little bit of VB in highschool, JavaScript was my first language. I mainly learned through two books: "The Good Parts" which was a nice overview, and "Object-Oriented JavaScript" a really underrated book that covered every little piece of the language, even those weird parts like block scoping and falsy types.<p>Having never learned anything about classes or inheritance, prototypal inheritance was kinda hard to grasp, but I eventually found it pretty amazing. I think a loosely typed language is much better to learn on too. That way you can learn the big pieces of the language then later get into the little things like typing. That's just my experience, but I'm really glad JS was my first language.
olov超过 13 年前
I want to take this further still. Most JavaScript programmers already use a subset of the language and I believe that there is quite a broad union of those subsets that should resonate with the majority of us. Excluding certain parts of the language will lead to more robust code that is easier to reason about (and more fun to write), I claim. My attempt to formalize it is called "restrict mode for JavaScript" <a href="http://restrictmode.org" rel="nofollow">http://restrictmode.org</a> and I laid my case here: <a href="http://blog.lassus.se/2011/03/case-for-restrict-mode.html" rel="nofollow">http://blog.lassus.se/2011/03/case-for-restrict-mode.html</a> . Would be curious to hear other thoughts about it.
评论 #3379528 未加载
kls超过 13 年前
One thing that I have not seen covered that is worth mentioning, is that JavaScript for the most part embraces an event based development model. While it is not unique to JavaScript it certainly is heavily reinforced by JavaScript and JavaScript developers. In other languages it can be fairly underrepresented, that being said, it is worth learning JavaScript due to the fact that it helps developers think of execution as events. One can go their whole life in other language and not deal with events, with JavaScript you will be hard pressed to get to intermediate tutorials without fairly good coverage of events and event syndication.
arctangent超过 13 年前
If you want to teach computer science to people then a good first language for them to learn is C, because it will help them think about and understand what the computer is actually doing.
评论 #3379921 未加载
city41超过 13 年前
On a similar note, I've been in the process of creating a JavaScript library[0] that is strongly inspired by _why's Shoes. My intent for doing this was to create a DSL where one can whip up webapps very quickly. But I'm also now looking into essentially recreating Hackety Hack on the web, and maybe having a simple way for very young people to get a taste of programming. Sadly JS isn't as DSL friendly as Ruby.<p>[0] <a href="https://github.com/city41/Joeys" rel="nofollow">https://github.com/city41/Joeys</a>
glenjamin超过 13 年前
Am I the only one who thinks that lack of block scope is only confusing for people who are used to it?<p>I don't think it'll affect JS-as-a-first-language people.
j45超过 13 年前
Interesting Idea.<p>I know for me the way I learnt programming made me quite flexible and happy.<p>Working the entire scale from functional to OO languages gave me a really good perspective for anything I face.<p>I've learnt all the web stuff I use today completely on my own, but I use the foundation I learnt below. The "classic" academic programming languages I've learnt happened in this order.<p>Basic -&#62; VB -&#62; Pascal (High school/first year Uni) --&#62; C --&#62; C++ --&#62; Java<p>Too much code out there rarely exists entirely on the OO or functional end and projects are often heading towards one or the other.<p>Once I had traversed this, I was easily able to pick up .NET, whether any one of the .NET languages was OO or functionally based (Foxpro, or whatever). Javascript was interesting because it extended from Java for me.<p>I really do feel that programming needs to be learnt at the mathematical/computational level of functions for clear process/analytics and then learn the benefits of using functions in an OO world.<p>Be interested to hear what order others learnt
评论 #3379521 未加载
malandrew超过 13 年前
I'm a full-time javascript developer and entrepreneur myself, but I'm wondering why you don't consider Scheme instead, basing the course on the How to Design Programs v2 curriculum?<p>The people behind that book have spent a lot of time thinking about how you teach programs to people.<p>More importantly, they focus on problem decomposition and concepts that provide a great foundation for growing.<p>The reasons I can see for using Javascript first is because everyone has a runtime available at their fingertips (M. Haverbeke's approach of including the console was great.) and because people can immediately see the utility of the language to real world needs.<p>But does Javascript provide the best foundation for future concepts? Does it teach good habits both mental and in practice?<p>Ref: The Structure and Interpretation of the Computer Science Curriculum <a href="http://www.ccs.neu.edu/racket/pubs/jfp2004-fffk.pdf" rel="nofollow">http://www.ccs.neu.edu/racket/pubs/jfp2004-fffk.pdf</a>
captainaj超过 13 年前
I parted away with CS to major in biochem thinking it wasn't as fascinating (first course was in C++). This is definitely not a bad idea and also already implemented. Stanford has CS101 in entirely Javascript: <a href="http://www.stanford.edu/class/cs101/" rel="nofollow">http://www.stanford.edu/class/cs101/</a>
tantalor超过 13 年前
I once considered teaching JavaScript as a first language, but the absence of synchronous user input made me reconsider.<p>For example, there is no way to do this in JavaScript,<p>&#62; var line = read_line();<p>Of course you could use the prompt() function, but that only works in the browser, and it's an ugly hack.
评论 #3379142 未加载
评论 #3380487 未加载
mycodebreaks超过 13 年前
Well, I would like to teach kids assembly language first. That's how my generation did it. Second language should be C. That's how you know how your program actually runs on a computer. You know what memory is, and how it is used.
jhuni超过 13 年前
Its pretty easy to criticise, so instead I will discuss the steps I would take to a student CS principles from my own experiences. I find graphs to be fundamental, so I would start the student out with them.<p>1. Teach the student basic concepts in graph theory such as nodes, edges, walks, paths, cycles, and structures such as trees, and linked lists.<p>2. Introduce the student to syntax trees as a means of representing mathematical equations, and the representation of them used in Lisp: (+ (* a x x) (* b x) c).<p>3. Describe dataflow graphs to the student. For example, loops are cycles in the dataflow graph, and infinite loops occur when the cycle is endless.
potch超过 13 年前
The hopeful part of me loves this because I truly believe the web stack is a truly democratizing technology, and has tremendous accessibility.<p>The cynical side of me also loves this because I like watching PL bikeshedders rage.
Stormbringer超过 13 年前
I loved this comment:<p><i>"The policy when I went to school was to start everyone with LISP. That way, if they never got past CompSci 101, they wouldn’t be capable of impersonating a real programmer. "</i> -- Dave Edelhart
olivier1664超过 13 年前
I've learn programming to create small 2D games: Turtle at 8, TI-82 at 16, Pascal at 18, C with Allegro at 22, android-java at 30. It was some "Snake" or "Tron" or "Bomberman" kind of games.<p>Seems obvious for me that children motivation can be creating game.<p>So, in my opinion, an ideal first language should be a sandbox language that have C syntax style without pointer stuff and can easily: - Read keyboard() - DrawPixel() - DrawImage() - PlaySound()<p>Bonus if there is no install. Bonus if created games can be send by email to friends.
_THE_PLAGUE超过 13 年前
I have commented (at length) on this earlier, so don't have much to add. But a further thought did occur to me: JavaScript has "loose typing", that is, one is not taught the difference between say, an int, and a double, or even a char, and the fact that there is no such thing (really) as a string - "strings" are just a lazy shorthand for a char array. Loose typing is not just incorrect - on some level, it is immoral, IMO.
ZenPsycho超过 13 年前
Someone is teaching JavaScript to other people? This is nothing less than /The Downfall of Civilisation As We Know It!/. Quick everyone, get your pitchforks!
neduma超过 13 年前
Io will do.<p>I do not think this would be optimum for new comers even thought i’m a die hard fan of JavaScript. You can teach ‘Io’ language instead of JavaScript which has all kind advantages you have mentioned and which has few set of parser rules that would be easier for new comers.<p>JavaScript can be a icing on the cake.
tingletech超过 13 年前
JavaScript was my first language. I made web applications using Netscape Enterprise Server which had server side javascript, and I worked on a signed javascript kiosk application that ran in Netscape and had javascript menus that would side off the screen.
capex超过 13 年前
To introduce kids to programming, there is nothing better than Javascript. Instant gratification &#38; no installations. It'll be an easy entry into harder concepts. But the way you enter does matter.
tolmasky超过 13 年前
Anyone else taught Karel++? In high school they taught us: Pascal -&#62; Karel++ -&#62; C++<p>Then the new AP tests came in and the switched to C++ -&#62; Java, which seemed very silly to me (C++ as a first language???)
评论 #3379831 未加载
jebblue超过 13 年前
&#62;&#62; a function is actually an object and can be manipulated as such<p>A function is an object? I also read down the comments and saw something like '1' + 2 prints '12'. ROFL
bdfh42超过 13 年前
Only thing I am not sure about is the focus on "===" - I think it is a pain and fails in too many instances to do what the programmer would expect.
评论 #3378890 未加载
评论 #3378941 未加载
评论 #3378902 未加载
评论 #3379685 未加载
_THE_PLAGUE超过 13 年前
My response: <a href="http://blogkinnetic.blogspot.com/2011/12/on-civic-decay-of-us-computer-science.html" rel="nofollow">http://blogkinnetic.blogspot.com/2011/12/on-civic-decay-of-u...</a>
_THE_PLAGUE超过 13 年前
Here is my blog article I wrote on this travesty. (Available here: <a href="http://blogkinnetic.blogspot.com/2011/12/on-civic-decay-of-us-computer-science.html" rel="nofollow">http://blogkinnetic.blogspot.com/2011/12/on-civic-decay-of-u...</a>) I am not a pugilist for the sake of it, but when I see abominations like this, well, somebody has to take a stand for whatever real programmers are actually left out there. :-) =================================================== When I saw the above article I could only be reminded of H.P. Lovecraft's description of the Massachusetts seaport town of Innsmouth, a great fishing community before the American Revolution, but which by the early 1900's had become a classic case of civic decay, with bootleg liquor becoming its primary occupation, and the general cultural or educational status descending to the level of the primitive. This is because the approach the article advocates for teaching computer science can only end in one place: the primitive, and by that I do not mean the C primitive variable types of char, float, double, and int, but I mean primitive as in stone-age. :-)<p>I learned programming a bit ass-backwards. I got a "teach yourself Java" kind of book, went through that, and generally learned things "on the fly" as it were, and, in so doing, in time, eventually was comfortable with the "Java world" of Java SDK (basic Java), XML, XSLT, and some DOS / UNIX scripting skills as well. Still to this day, Java is a language I feel very "at home" in, and would choose if I had to build something up really fast. It is my "GOTO" or "default" language if you will.<p>Later, though, I started to study C++ and C, first for a job that required me to write unit tests using CPPUnit (the C++ port of Java's JUnit) and just sort of "learning on the fly" began to be able to understand and edit C++ code, though I was not then (or now) as proficient there as in Java. Still later, I studied C proper and read Kernighan and Richie's classic book, "The C programming Language". I think it was then, and only then, that I really understood the fundamentals of programming, by which I mean the principles of it, not just memorizing syntax to get stuff done, but rather having a deep understanding of things like memory allocation, processes, stacks, etc.<p>The thrill of creating dynamic (re-sizable) arrays using C-style pointers is something that still gives me a bit of a high, because there are many situations in which resizable arrays are needed or desirable, and doing this via C-style pointers is the most efficient way of doing it.<p>I can say that while today I still would choose Java if I were doing a personal project of some size or complexity just for expediancy's sake, I love C the most, for it is the most efficient (fast, using less memory, etc.).<p>To make a comparison to poetry: Java is Ginsberg and C is Eliot. Both of whom I love, but they are different styles. Ginsberg is the Jazz musician of poetry - creating crazy yet haunting melodies by going "off the map" if one wills in terms of traditional styles. Eliot is the baroque musician of poetry - using the fewest notes to create the greatest effect - precision is the key word here - no room for an off-note here or there but every note having a purpose. Both have their place. I love Jazz. But in terms of aesthetic efficiency, baroque has something to be said for it. Ginsberg is poetry's Jazz - wild, haunting, all over-the-place in a good way. Eliot is poetry's baroque - precise, haunting as well if more in a subtle way, and always having a precise direction or purpose.<p>Well, Java is the Ginsberg / Jazz of this analogy. It is easier / quicker to mess around and improvise and come up with a Jazz tune. It takes longer and it is more painstaking to come up with a baroque melody. Both are great and have their place. However, while I would use the quicker thing to come up with something on a deadline (Java / Jazz) there is a certain satisfaction to be had with taking longer and having to put more effort in order to produce precise, efficient, parsimonious code, and by parsimonious I mean not wasting any memory or CPU cycles, but having each bit of memory serve a purpose, just like each note of a baroque piece or each line of an Eliot poem has a precise purpose and taking one line out or one note out would ruin the whole thing.<p>So, while I still would use Java probably the most, I find a certain nobility in C, much as while I might probably listen to Jazz (or its descendants) the most, I find a certain nobility in baroque, and whereas I love and relate very much to Ginsberg, there is a certain appeal in Eliot's ability to say so much with so little that will always hold an attraction for me.<p>This is why the above article I came across, in which a computer science professor is talking about using, not even Java, but JavaScript for goodness sake, as the first language to teach students, is so tragic. Like I intimated before, if I had to do it all over again, I would have studied C before I even got into Java. That would have taught me correct principles and just a better "philosophy" of programming. As it was though, I was lucky. I worked with a math PhD who was a C++ whiz, a guy named Dr. Mark T. Lane, Chief Scientist at what is now mobi (mobicorp.com) who imparted to me the basic concepts of efficiency and attention to detail that I could never have gotten from the Java world, so, although it was later that I seriously began to study C, even early on I had some of those benefits, for which I will always count myself lucky and grateful.<p>But not everyone is going to luck out like me and get to work with such brilliant folks. I can only feel sorry for those aspiring computer scientists who go to a computer science program and get freaking JavaScript as the opening silo in their introduction to the world of programming, and I can only feel contempt for those professors who would advocate such a fool's errand.<p>When I was a kid, I loved this old 1950's teen sci-fi novel called "The Forgotten Star" featuring a character named Digby Allen who travels to the 50's version of a moon base and a Mars base, and eventually lands on Eros, an asteroid. Turns out in the book the asteroid is a space ship and inside are people from another planet (from a "forgotten star") who long ago have forgotten the knowledge that propelled them into space in the first place. The interior of the ship has a simulated earth-like environment, with a sky, fields, etc., and these people live like primitive savages, in huts, etc. not knowing there is a world outside the interior of their space ship, not even knowing, for that matter, what a space ship even is. They have a cool contraption which can convert atoms into anything asked for, so they get their food from that. The contraption (as near as I can recall) would basically take atoms from space and convert them into the molecules for whatever the user requested, so I could say ask it for bread and it would give me bread. To these inhabitants it was like a magic thing, for they had lost the knowledge that went into producing that contraption to begin with. And I suppose the young space adventurer Digby Allen saves the day and brings them into the modern age, though now I forget just how that ended. But I will never forget the impression which the book had upon me - the concept, the very sad concept, of a people once-advanced who through laziness had allowed themselves to descend into ignorance and dependency upon technologies they could no longer understand.<p>I was reminded of this tragedy when I saw the above article. Already I had read essays about computer science professors lamenting that C / C++ is no longer at some schools taught, Java being the preferred language. And now, it seems we are descending yet another rung, with JavaScript now being the preferred language. What is next? HTML? How about just forget about teaching kids how to write code and teach them how to use point-and-click tools like say WordPress which does not require any code skills at all to at least be able to use the basics thereof.<p>If we go down this road enough, we will be in the "Forgotten Star" situation - able to use tools built in the past but not having the knowledge anymore to build those tools again. Because you can only create great Jazz if you also know how to play baroque. You can create mediocre jazz I am sure - hell, a chimpanzee, given enough time, also could. But you cannot play great jazz without the underlying principles that led to it. Neither can we expect great code to be developed without the understanding of the underlying principles which led to our current languages (like JavaScript) in the first place.<p>Oh, and one more thing, subverting a function into an "object" has its purposes in terms of being able to code things up faster, more easily understanding the architecture, etc., but here is a dirty secret that apparently contemporary self-styled computer science professors won't tell you: a mathematical function is not an "object", sweetheart. Because "objects" belong to "sets" which may describe computational functions, but are not the functions themselves.<p>Deal with it, Java cultists. :-)
评论 #3380032 未加载
jaequery超过 13 年前
john, just teach them jQuery!
more_original超过 13 年前
Nooooo!
its_so_on超过 13 年前
wat. This is like teaching postscript as a first language.<p>almost literally.
评论 #3379718 未加载