C开发人员无法利用的JavaScript功能?

Dan*_*don 18 javascript c programming-languages

同伙堆垛机,

在我参加的第一个计算机科学课上,教授使用C++作为教学语言.他强调要理解的重要事项是编程的概念,而不仅仅是语言本身.

在过去的几年里,我从事数据库驱动的Web开发工作.起初,我正忙着学习使用服务器端编程工具,即ASP.net.我早期的大多数同事并没有使用太多的客户端脚本代码,但我一直在努力学习编写好的客户端脚本.

我已经开始认真使用jQuery了.

大多数C++或.net开发人员在第一次遇到JavaScript时会注意到的第一件事就是它的语法与C风格的语言非常相似.

有重要的区别.JavaScript使用变量数据类型,允许数组在线声明,并使用它自己的对象语法和花括号.最重要的是,JavaScript是一种解释性语言,允许用户使用Web浏览器与"文档 - 对象 - 模型"进行交互,C++通常被编译为本机代码(或有时是托管代码).如果不仅仅是对两种语言进行肤浅的比较,那将是愚蠢的.

我想问的是,"当我学习编写JavaScript代码时,我的一部分思绪不禁将其视为C代码,因为它看起来像C代码.我可能犯的错误是什么这个?我可能没用的语言有什么有用的功能?"

更新:我编辑了我的问题标题,因为很明显我的旧标题含糊不清: - /

Mör*_*rre 7

这里没有足够的空间,此外,因为至少有一个很棒的来源我只发布一个链接:

要了解Javascript的REAL(深层概念)基础知识,请访问Douglas Crockford的视频,网址http://developer.yahoo.com/yui/theater/

他是最重要的人物之一(在那之前)隐藏了语言的强大力量.此外,即使对于编程语言这样一个相对干燥的话题,他也是一位非常优秀的主持人.

然而,那些视频并不适合初学者编程,但是你提出的问题对他们来说并不是一个有用的问题,因为任何答案都需要更深入的理解和相当多的练习.

核心Javascript非常好.你做其他语言在编译时发生的事情,例如,当你的JS程序被加载时你已经执行了动态组装对象,"类"等的代码 - 并且在初始加载和执行之后它可以是一个完全不同的部分软件 你没有任何其他(旧)语言的这两个阶段(你可以用Ruby做,类似的故事,那些现代语言共享某些功能).因此,比较JS和C/C++没有任何帮助,尤其是当你只看到语法leven的东西时,在这种情况下你根本就什么也学不到.但它可以提供学习的幻觉.看CROCKFORD.


是另一个答案中讨论的块范围示例,因为我现在没有其他地方可以放置它(为了方便包装在函数"foo"中).有一种说法,你不能在Javascript中拥有块范围.当然,在其他语言中,您使用更熟悉的语法,通常只包含{}或有时BEGIN ... END.无论如何,下面提供了完全的块范围.是的,它使用"function"关键字,但仅仅因为你不习惯它不会改变事实.

function foo () {
    var a = 1;

    (function () {
        //THIS IS BLOCK SCOPE
        var a = 2;
        console.log(a);
    })();  //IMPORTANT: the "()" executes it immediately, INLINE

    console.log(a);
};
Run Code Online (Sandbox Code Playgroud)

调用foo():

2
1
Run Code Online (Sandbox Code Playgroud)

如果有人还在说"块范围(在JS)是不可能的",他们应该指出什么"块范围"应该有上面的例子中不提供,除了需要一些时间来适应和被少美观比包装代码赏心悦目在{}或BEGIN ... END.

  • +1可供参考. (3认同)
  • @Morre通常你_can_将它称为块作用域,但是你的重命名函数作用域可以阻止作用域.`(function(){`和`})();`不是启动新块并结束新块的关键字.是的,您已创建新范围,但您已在新功能中创建了本地范围.您创建的这个新函数存在,但由于它没有命名,因此您没有句柄或指针.有一个微妙的区别. (2认同)

650*_*502 6

我会说

  1. 关闭
  2. 无名的内联对象
  3. 动态打字
  4. 垃圾收集
  5. 动态数组和对象

但却有人在C来实际上可能没有"小姐"这些功能...一个可以愉快的使用JavaScript为C(当然失去了很多这样做,也创造研究员程序员真正的噩梦,其实知道的JavaScript,如果他们有工作在同一个项目上).


Ray*_*nos 2

这主要是用 JavaScript 编写过程代码的问题。如果您像 C 一样编写 JavaScript,您将错过两个重要功能:

原型 OOP一等函数

原型 OOP 允许您创建新对象并应用许多其他语言的 OOP 模式。它与经典的 OOP 有很大不同。

关于这方面的一篇好文章是JavaScript Garden Objects 部分

第一类函数允许您将函数作为参数传递,这允许您编写函数代码。仅凭这一点,您就可以接近 LISP、ML 或 Haskell 的强大功能。JavaScript Garden Functions 部分又是一篇好文章。

这两件事之所以大是因为它们允许你使用OOP范式Functional范式

否则你将永远被困在编写过程式 JavaScript 中。