的JavaScript

雇用 Top 3%自由JavaScript开发人员

托塔尔 是面向顶级JavaScript开发人员和编码人员的市场。顶尖公司和初创公司的CEO,CTO和管理层与Toptal JavaScript自由职业者合作,以扩大其JavaScript开发,应用程序开发,Web开发和其他软件开发项目的开发团队,以实现其业务需求。

无风险试用,仅在满意时付款。

客户评价 托塔尔 JavaScript Developers4.4 / 5.0截至2021年2月14日,平均共有4,094条评论

受到领先品牌和初创企业的信任

雇用自由JavaScript开发人员和工程师

杰伊·约翰斯顿

自由JavaScript开发人员

美国托塔尔 Member Since November 6, 2013

自从杰伊(Jay)于1997年入伍以来就为HTML,CSS和JS进行编码'适应网络技术以满足客户需求的丰富经验。他喜欢通过电子商务解决方案,旧版集成以及优化的PHP和JavaScript驱动的应用程序为客户带来价值。

展示更多

泰勒·斯坦德利

自由JavaScript开发人员

美国托塔尔 Member Since June 25, 2018

泰勒(Tyler)具有较强的沟通能力和典范的职业道德,并结合了多种编程语言的实践经验。不过,最近,他的重点一直放在JavaScript库上。在他的整个职业生涯中,他作为核心开发人员在多个敏捷团队中工作,现在对从事与JavaScript相关的任何工作感兴趣。

展示更多

贾斯汀·米歇拉(Justin Michela)

自由JavaScript开发人员

美国托塔尔 Member Since March 28, 2018

贾斯汀(Justin)是一名技术专家,对学习充满热情,并拥有超过15年的领导团队经验,致力于构建解决实际问题的企业级分布式应用程序。他坚定地相信,从开发到市场营销再到销售,企业各个方面的协作都必须取得成功。

展示更多

大卫·米哈尔(David Mihal)

自由JavaScript开发人员

美国托塔尔 Member Since April 16, 2016

大卫一生都在开发网站和Web应用程序。作为软件工程师,他'曾为许多不同的软件公司服务,从早期的初创公司到Google。 David拥有许多Web框架和环境的经验,但是他特别喜欢使用Meteor.js进行开发。他赞赏质量代码的重要性以及满足调度需求的需求。

展示更多

詹姆斯·越志

自由JavaScript开发人员

美国托塔尔 Member Since February 27, 2014

James是专注于Web开发的软件工程师和顾问。他在启动和企业业务环境构建解决方案方面拥有十多年的经验,这些解决方案以全栈技能,创造性思维和对细节的高度关注为关键,而快速周转至关重要。

展示更多

艾哈迈德·索利曼

自由JavaScript开发人员

埃及托塔尔 Member Since September 11, 2019

艾哈迈德(Ahmad)从Google实习生开始,自2015年以来一直领导B2B服务和管理应用程序的开发。在项目中,他通常会做出有关状态管理,套件选择,测试策略,文件结构和代码分解以及团队负载和任务分配。 Ahmad还建立了共享组件框架,可重用的CSS代码以及可以处理项目的抽象代码' different features.

展示更多

里卡多·巴斯托(Ricardo Basto)

自由JavaScript开发人员

德国托塔尔 Member Since March 18, 2019

里卡多(Ricardo)从事编码已有20多年,曾用十多种编程语言在项目中工作。他最近的工作范围从数据科学和机器学习到高性能的Web和移动应用程序。

展示更多

Eugeniu Rata

自由JavaScript开发人员

美国托塔尔 Member Since September 29, 2012

Eugeniu是一位全面的全栈软件工程师,在从C / C ++,C#/。NET到Node.js,React,Angular,Electron等多种技术中拥有近二十年的经验。 Eugeniu可以建立和发展新概念,加入或领导团队,并使秩序混乱。他热衷于创新和交付令人难以置信的产品,并热爱团队。

展示更多

斯蒂芬·安诺欣

自由JavaScript开发人员

俄罗斯托塔尔 Member Since April 30, 2018

凭借扎实的数学知识基础和专业的软件开发人员背景,Stepan拥有丰富的经验和技能可以胜任大多数软件工程工作。在他的职业生涯中,他'曾参与多个项目,包括大型企业系统,Web开发和云计算。 Stepan一直渴望探索计算机科学的新领域并应用尖端技术。

展示更多

安东·拉兹马赫宁(Anton Razmakhnin)

自由JavaScript开发人员

俄罗斯托塔尔 Member Since April 30, 2019

Anton是一位高级C#开发人员,在为.NET和.NET Core平台开发本机(WinForms,WPF)和Web(ASP.NET)应用程序方面拥有十多年的经验。他在领导团队,指导开发人员,自动化流程以及开发Web应用程序方面具有专业知识'前端。他编写的代码非常干净,并且非常适合测试,以确保准确性和稳定性。

展示更多

恩尼兹·武科维奇(Eniz Vukovic)

自由JavaScript开发人员

波斯尼亚和黑塞哥维那(简称:波黑托塔尔 Member Since November 4, 2019

作为一名自学成才的程序员和企业家,Eniz随时准备迎接挑战并提供最好的解决方案'在Viber,Inc.维护零停机时间系统,或创建一个供欧洲成千上万的人使用的社交网络。他喜欢为开源项目做贡献并进行讨论。

展示更多

立即注册以查看更多个人资料。

开始招聘

招聘指南

雇用优秀JavaScript开发人员的指南

与任何技术一样,人们都了解JavaScript,然后才真正了解JavaScript。这里有证明有效的技术和问题,可以帮助您找到真正的语言大师。

阅读招聘指南

的JavaScript招聘资源

更多资源来雇用JavaScript开发人员

职位描述模板

面试问题

常见错误

提示与实践

职位

信任飞行员
托塔尔 in the press

...使公司能够快速组建对特定项目具有适当技能的团队。

尽管对编码人员的需求不断增加,但托普塔尔(Toptal)却以常春藤联盟级别的审查为荣。

我们的客户
构建一个跨平台的应用程序以供全球使用
蒂埃里·雅基切维奇(Thierry Jakicevic)
构建一个跨平台的应用程序以供全球使用
1
2
3
为游戏创建一个应用
科纳·肯尼
为游戏创建一个应用
1
2
3
引领数字化转型
埃尔玛·普拉泽(Elmar Platzer)
引领数字化转型
1
2
3
感言

Tripcents会'没有Toptal就存在。 Toptal Projects使我们能够与产品经理,首席开发人员和高级设计师一起快速发展我们的基础。在短短60天内,我们从概念发展到了Alpha。速度,知识,专业知识和灵活性是首屈一指的。 Toptal团队是Tripcents的任何内部团队成员,也是Tripcents的一部分。他们像其他所有人一样做出了贡献并获得了开发的所有权。我们将继续使用Toptal。首先,它们是我们的秘密武器。

布兰特利·佩斯(Brantley Pace),首席执行官& Co-Founder

Tripcents

我们对Toptal的经验感到非常满意。与我一起工作的专业人员在几个小时内就与我通了电话。与他讨论我的项目后,我知道他是我想要的候选人。我立即雇用了他,他不花时间去参加我的项目,甚至通过添加一些很棒的设计元素来增强我们的整体外观而付出了更多努力。

董事Paul Fenley

邓恩& Associates

与我配对的开发人员令人难以置信-聪明,有驱动力和反应灵敏。过去很难找到质量工程师和顾问。现在不是't.

瑞安·洛克菲勒(Ryan Rockefeller),首席执行官

拉迪厄斯

托塔尔 立即了解我们的项目需求。从第一天开始,我们与来自阿根廷的杰出自由职业者相匹配,这位自由职业者专注于我们的行业,与我们的团队无缝融合,了解我们的愿景,并取得了一流的成绩。 Toptal使与高级开发人员和程序员的联系变得非常容易。

联合创始人Jason Kulik

ProHatch

作为一家资源有限的小公司,我们可以'不能承担昂贵的错误。 Toptal为我们提供了一个经验丰富的程序员,他能够扎实地工作并立即开始做出贡献。这是一次很棒的经历,我们'd再次心跳重复。

校长Stuart Pocknee

特定于站点的软件解决方案

我们使用Toptal聘请了具有丰富Amazon Web Services经验的开发人员。我们采访了四名候选人,其中一位最适合我们的要求。该过程快速有效。

AbnerGuzmánRivera,首席技术官兼首席科学家

照片Kharma

Sergio是一位很棒的开发人员。一流,响应迅速,高效地完成了工作。

丹尼斯·鲍德温(Dennis Baldwin),首席技术专家兼联合创始人

PriceBlink

与Marcin合作是一件乐事。他胜任,专业,灵活并且非常快速地了解需要什么以及如何实施。

首席技术官AndréFischer

开机自检

我们需要一个可以立即开始我们项目的专家工程师。 Simanas的工作超出了我们的期望。无需采访和追逐专家开发人员,这可以节省大量时间,并且使每个人都对我们选择平台以使用更强大的语言感到满意。 Toptal使该过程变得轻松便捷。现在,Toptal是我们寻求专家级帮助的第一位。

Web开发高级副总裁Derek Minor

网络世界媒体集团

托塔尔 '的开发人员和架构师非常专业并且易于使用。他们生产的解决方案价格公道,质量一流,减少了我们的发布时间。再次感谢您,Toptal。

杰里米·韦塞尔斯(Jeremy Wessels),首席执行官

科尼西

我们在Toptal方面拥有丰富的经验。他们将我们与适合我们应用程序的完美开发人员配对,使过程非常容易。超出初始时间范围也很容易,而且我们能够在整个项目中保留相同的承包商。我们绝对推荐Toptal来快速,无缝地找到高质量的人才。

首席技术官Ryan Morrissey

应用商业技术有限公司

I'我对Toptal印象深刻。我们的开发人员每天与我交流,并且是非常强大的编码器。他'是一位真正的专业人士,他的工作非常出色。 Toptal的5星。

Pietro Casoar,首席执行官

罗宁游乐有限公司

与Toptal的合作经验非常丰富。在使用它们之前,我花了很多时间采访其他自由职业者,'找不到我需要的东西。与Toptal接触后,他们在短短几天内就将我与完美的开发人员配对。开发者我 '与他合作不仅提供了高质量的代码,而且还就我以前没有的东西提出了建议't thought of. It'对我来说很清楚,阿毛里知道他在做什么。强烈推荐!

首席执行官郑

Bulavard,Inc.

作为Toptal合格的前端开发人员,我还经营自己的咨询业务。当客户来找我帮助填补他们团队中的关键角色时,Toptal是我唯一推荐的地方。托塔尔'整个候选人池就是最好的。最高是我最物有所值'我们发现了将近五年的专业在线工作。

首席技术官Ethan Brooks

朗格茨专利&商标工程有限公司

在Higgle中'早期,我们需要及时以合理的价格获得一流的开发人员。托帕特交付!

首席执行官Lara Aldag

闲聊

托塔尔 使寻找候选人变得异常容易,使您放心,他们具备应聘技巧。我绝对会向任何寻求高技能开发人员的人推荐他们的服务。

数据经理Michael Gluckman

退出

托塔尔 能够迅速将我们的项目与最佳开发者进行匹配的能力实在是太棒了。开发人员已成为我们团队的一员,他们每个人所表现出的专业承诺水平令我感到惊讶。对于那些希望与最好的工程师进行远程合作的人,Toptal就是您的最佳选择。

创始人Laurent Alis

Livepress

托塔尔 使寻找合格的工程师变得轻而易举。我们需要一个经验丰富的ASP.NET MVC架构师来指导我们的启动应用程序的开发,Toptal在不到一周的时间内为我们提供了三个不错的候选人。做出选择后,工程师立即上线并开始运作。这比必须自己发现和审查候选人要容易得多。

联合创始人Jeff Kelly

协调解决方案

我们需要在Scala中进行一些短期工作,Toptal在24小时内找到了我们一个出色的开发人员。这根本不可能通过任何其他平台来实现。

弗兰科·阿尔达(Franco Arda),联合创始人

WhatAdsWork.com

托普塔尔(Toptal)为正在快速发展和规模化的企业提供不妥协的解决方案。我们每个工程师'通过Toptal签约的ve已迅速融入我们的团队,并以最高的质量水准保持工作,同时保持了飞速的发展速度。

格雷格·金博尔(Greg Kimball),联合创始人

nifti.com

如何通过Toptal雇用JavaScript开发人员

1

与我们的一位行业专家交谈

Toptal工程总监将与您合作,了解您的目标,技术需求和团队动力。
2

与手工挑选的人才一起工作

在几天之内,我们'将向您介绍适合您的项目的JavaScript开发人员。平均比赛时间不超过24小时。
3

合适的,有保证的

与您的新JavaScript开发人员一起试用(仅在满意时付款),以确保他们'在开始参与之前重新选择合适的衣服。

常见问题

  • Toptal JavaScript开发人员有何不同?

    在Toptal,我们彻底筛选了JavaScript开发人员,以确保我们只与具有最高才能的人才相匹配。每年申请加入Toptal网络的100,000多人中,晋级的比例不到3%。您将与工程专家(从不聘请一般招聘人员或人力资源代表)合作,以了解您的目标,技术需求和团队动力。最终结果:专家审核了我们网络中的人才,并根据您的业务需求进行了定制匹配。 现在开始。

  • 我可以通过Toptal在不到48小时内雇用JavaScript开发人员吗?

    根据可用性和进度的快慢,您可以在注册后48小时内开始与JavaScript开发人员合作。 现在开始。

  • Toptal JavaScript开发人员的无风险试用期是多少?

    我们确保您和JavaScript开发人员之间的每次互动都以最多两周的试用期开始。这意味着您有时间确认参与将成功。如果您对结果完全满意,我们将为您收取时间费用,并继续为您服务。如果您不完全满意,则无需付费。从那里,我们可以分开,也可以为您提供另一位更合适的专家,我们将与他一起开始第二次无风险的试验。 现在开始。

  • Toptal拥有哪些类型的人才?

    我们的平台拥有各种技能,经验和背景。我们的自由职业者包括软件工程师,用户体验设计师,项目管理专家和产品经理,以及曾在Google,Microsoft,Amazon等领先公司工作的财务专家。

  • Toptal还提供哪些其他服务?

    除了提供人才匹配服务外,我们还提供开发公司之类的Web和应用程序开发服务。通过我们的Toptal Projects团队,我们组建了由高级项目经理,Web开发人员,应用程序开发人员,用户界面设计师和其他技术技能组成的跨职能团队。我们的团队成员遵循定义明确的开发流程来构建功能全面的解决方案。

分享
的JavaScript

如何雇用优秀的JavaScript开发人员

挑战

在当今的技术环境中,JavaScript本质上已成为客户端Web开发的代名词,如今,随着诸如Node.js,Vue.js和React.js之类的技术和JavaScript框架的出现,JavaScript已成为服务器端的主导技术出色地。

因此,全栈开发人员恢复了对至少一定程度的JavaScript经验的引用在软件开发社区中的普遍性。这使查找JavaScript Web开发人员变得相当容易,但是却使他们过筛以找到“精英人士”,这是一大挑战。如我们的职位所述,找到他们需要高效的招聘流程 寻找精英人士–寻找并雇用业内最佳开发商。然后,可以用这样的问题(例如此处提出的问题)来扩大这一过程,以识别出在全球范围内分布稀疏的真正JavaScript专家。

是的,我知道JavaScript ...

与任何技术一样,我们知道JavaScript的发展,然后 真的 懂JavaScript。在寻找真正的语言大师时,我们需要一个面试过程,以准确量化候选人在JavaScript专业技能水平上的位置。

为了实现这一目标,本文提供了一些问题样本,这些问题对于评估候选人对JavaScript的掌握程度和深度至关重要。不过,重要的是要记住,这些示例问题仅旨在作为指导。并非每个值得招聘的“ A”候选人都能正确回答所有问题,也不能全部回答都能保证一个“ A”候选人。归根结底,招聘仍然是一门艺术和一门科学。

评估基金会

碰到“经验丰富”的JavaScript程序员,这是很常见的事情,他们对语言基础的掌握要么很弱,要么很困惑。

的JavaScript是具有动态类型的基于原型的脚本语言。首先,JavaScript可能会使熟悉基于类的语言(例如Java或C ++)的开发人员感到困惑,因为它是动态的并且不提供传统的类实现。因此,遇到“经验丰富”的JS开发人员实在是太普遍了,他们对语言基础的掌握要么很弱,要么很困惑。

因此,可以帮助评估开发人员对JavaScript基础的掌握的问题(包括其一些更细微的细微差别)是面试过程中的重要组成部分。这里有些例子…

问:描述JavaScript中的继承和原型链。举个例子。

尽管JavaScript是一种面向对象的语言,但它是基于原型的,并且没有实现传统的基于类的继承系统。

在JavaScript中,每个对象在内部都引用另一个对象,称为 原型。该原型对象又引用了其原型对象,依此类推。该原型链的末尾是一个对象,其原型为null。原型链是继承的机制- 原型继承 准确地说-是用JavaScript实现的。特别是,当引用对象本身不包含的属性时,将遍历原型链,直到找到引用的属性(或直到到达链的末尾为止,在这种情况下,该属性未定义)。

这是一个简单的示例:

function Animal() { this.eatsVeggies = true; this.eatsMeat = false; }

function Herbivore() {}
Herbivore.prototype = new Animal();

function Carnivore() { this.eatsMeat = true; }
Carnivore.prototype = new Animal();

var rabbit = new Herbivore();
var bear = new Carnivore();

console.log(rabbit.eatsMeat);   // logs "false"
console.log(bear.eatsMeat);     // logs "true"

问:比较和对比JavaScript中的对象和哈希表。

这有点棘手,因为在JavaScript中,对象本质上是哈希表。即名称/值对的集合。在这些名称-值对中,需要注意的一个关键点是名称(也称为键)始终是字符串。这实际上使我们想到了下一个问题……

问:请考虑下面的代码段(来源)。警报将显示什么?解释你的答案。

var foo = new Object();
var bar = new Object();
var map = new Object();

map[foo] = "foo";
map[bar] = "bar";

alert(map[foo]);  // what will this display??

很少有人会正确回答这会警告字符串“ bar”。 大多数人会错误地回答它会警告字符串“ foo”。因此,让我们了解为什么“酒吧”确实是正确的,尽管令人惊讶,但答案...

如先前问题的答案所述,JavaScript对象本质上是名称-值对的哈希表,其中名称(即键)是字符串。他们是 总是 字符串。实际上,在JavaScript中将字符串以外的其他对象用作键时,不会发生错误。而是JavaScript 默默 将其转换为字符串,并使用该值作为键。如上面的代码所示,这可能会产生令人惊讶的结果。

To understand the above code snippet, one must first recognize that the map object shown does 不是 map the object foo to the string “foo”, nor does it map the object bar to the string “bar”. Since the objects foo and bar are not strings, when they are used as keys for map, JavaScript automatically converts the key values to strings using each object’s toString() method. And since neither foo nor bar defines its own custom toString() method, they both use the same default implementation. That implementation simply generates the literal string “[object Object]” when it is invoked. With this explanation in mind, let’s re-examine the code snippet above, but this time with explanatory comments along the way:

var foo = new Object();
var bar = new Object();
var map = new Object();

map[foo] = "foo";    // --> map["[object Object]"] = "foo";
map[bar] = "bar";    // --> map["[object Object]"] = "bar";
                     // NOTE: second mapping REPLACES first mapping!

alert(map[foo]);     // --> alert(map["[object Object]"]);
                     // and since map["[object Object]"] = "bar",
                     // this will alert "bar", not "foo"!!
                     //    SURPRISE! ;-)

问:解释JavaScript中的闭包。这些是什么?它们的一些独特功能是什么?您想如何以及为什么要使用它们?提供一个例子。

闭包是一个函数,以及创建闭包时在范围内的所有变量或函数。在JavaScript中,闭包是作为“内部函数”实现的;即在另一个函数体内定义的函数。这是一个简单的例子:

(function outerFunc(outerArg) {
  var outerVar = 3;

  (function middleFunc(middleArg) {
    var middleVar = 4;

    (function innerFunc(innerArg) {
      var innerVar = 5;
      // EXAMPLE OF SCOPE IN CLOSURE:
      // Variables from innerFunc, middleFunc, and outerFunc,
      // as well as the global namespace, are ALL in scope here.
      console.log("outerArg="+outerArg+
                  " middleArg="+middleArg+
                  " innerArg="+innerArg+"\n"+
                  " outerVar="+outerVar+
                  " middleVar="+middleVar+
                  " innerVar="+innerVar);
      // --------------- THIS WILL LOG: ---------------
      //    outerArg=123 middleArg=456 innerArg=789
      //    outerVar=3 middleVar=4 innerVar=5
    })(789);
  })(456);
})(123);

闭包的一个重要特征是内部函数甚至仍然可以访问外部函数的变量 外部函数已返回。这是因为,当执行JavaScript中的函数时,它们会使用有效的作用域 当它们被创建时.

但是,这导致一个常见的混淆点是基于以下事实:内部函数在访问外部函数时会访问外部函数的变量值 被援引 (而不是当时 被创造)。为了测试候选人对这一细微差别的理解,请提供以下代码段,该代码段可动态创建五个按钮,并询问用户单击第三个按钮时将显示什么:

function addButtons(numButtons) {
  for (var i = 0; i < numButtons; i++) {
    var button = document.createElement('input');
    button.type = 'button';
    button.value = 'Button ' + (i + 1);
    button.onclick = function() {
      alert('Button ' + (i + 1) + ' clicked');
    };
    document.body.appendChild(button);
    document.body.appendChild(document.createElement('br'));
  }
}

window.onload = function() { addButtons(5); };

当用户单击第三个按钮时,许多人会错误地回答将显示“单击了按钮3”。实际上,上面的代码包含一个错误(基于对闭包工作方式的误解),当用户单击时将显示“单击按钮6”。 任何 五个按钮中的一个。这是因为,在这一点上,onclick方法是 被援引 (为了 任何 的 the buttons), the for loop has already completed and the variable i already has a value of 5.

一个重要的后续问题是询问应聘者如何修复上述代码中的错误,以便产生预期的行为(即,单击按钮n会显示“按钮n已单击”)。正确的答案表明正确使用了闭包,如下所示:

function addButtons(numButtons) {
  for (var i = 0; i < numButtons; i++) {
    var button = document.createElement('input');
    button.type = 'button';
    button.value = 'Button ' + (i + 1);
    // HERE'S THE FIX:
    // Employ the Immediately-Invoked Function Expression (IIFE)
    // pattern to achieve the desired behavior:
    button.onclick = function(buttonIndex) {
      return function() {
        alert('Button ' + (buttonIndex + 1) + ' clicked');
      };
    }(i);
    document.body.appendChild(button);
    document.body.appendChild(document.createElement('br'));
  }
}

window.onload = function() { addButtons(5); };

尽管闭包绝不是JavaScript专有的,但对于许多现代JavaScript编程范例而言,闭包是一个特别有用的构造。一些最受欢迎的JavaScript库(例如jQuery和Node.js)广泛使用它们。

拥抱多样性

的JavaScript容纳了异常广泛的编程技术和设计模式。 JavaScript大师将清楚地知道选择一种方法与另一种方法的重要性和影响。

的JavaScript是一种多范式语言,支持面向对象,命令式和函数式编程样式。因此,JavaScript可容纳异常广泛的编程技术和设计模式。 JavaScript大师将清楚地知道这些替代方法的存在,更重要的是,选择一种方法而不是另一种方法的重要性和后果。以下是一些示例问题,可帮助评估候选人专业知识的这一方面:

问:请描述创建对象的不同方法以及每个对象的后果。提供示例。

下图对比了JavaScript中创建对象的各种方法以及每种方法导致的原型链的差异。

Q: Is there ever any practical difference between defining a function as a function expression (e.g., var foo = function(){}) or as a function statement (e.g., function foo(){})? Explain your answer.

是的,根据函数值的分配方式和时间有所不同。

When a function statement (e.g., function foo(){}) is used, the function foo may be referenced before it has been defined, through a technique known as “hoisting”. A ramification of hoisting is that the last definition of the function is the one that will be employed, regardless of when it is referenced (if that’s not clear, the example code below should help clarify things).

In contrast, when a function expression (e.g., var foo = function(){}) is used, the function foo may not be referenced before it is defined, just like any other assignment statement. Because of this, the most recent definition of the function is the one that will be employed (and accordingly, the definition must precede the reference, or the function will be undefined).

这是一个简单的示例,展示了两者之间的实际区别。考虑以下代码片段:

function foo() { return 1; }

alert(foo());   // what will this alert?

function foo() { return 2; }

许多JavaScript开发人员会错误地回答上述警报将显示为“ 1”,并惊讶地发现它实际上将显示为“ 2”。如上所述,这是由于提升。由于使用了函数语句来定义函数,因此函数的最后一个定义是在调用时(即使是在代码中调用之后)也将对其进行提升。

现在考虑以下代码片段:

var foo = function() { return 1; }

alert(foo());   // what will this alert?

foo = function() { return 2; }

在这种情况下,答案将更加直观,并且警报将按预期显示“ 1”。由于使用了函数表达式来定义函数,因此,函数的最新定义是在调用函数时使用的函数。

细节中的魔鬼

除了到目前为止讨论的高级JavaScript概念之外,真正的JavaScript专家将非常熟悉该语言的许多底层语法细节。这里有一些例子…

问:将JavaScript源文件的全部内容包装在功能块中的意义和原因是什么?

这是一种越来越普遍的做法,被许多流行的JavaScript库(jQuery,Node.js等)采用。此技术会在文件的整个内容周围创建一个闭合,这可能是最重要的是创建一个私有名称空间,从而有助于避免不同的JavaScript模块和库之间可能发生的名称冲突。

Another feature of this technique is to allow for an easily referenceable (presumably shorter) alias for a global variable. This is often used, for example, in jQuery plugins. jQuery allows you to disable the $ reference to the jQuery namespace, using jQuery的.noConflict(). If this has been done, your code can still use $ employing this closure technique, as follows:

(function($) { /* jQuery plugin code referencing $ */ } )(jQuery);

Q: What is the difference between == and ===? Between != and !==? Give an example.

The difference between “triple” comparison operators (===, !==) and double comparison operators (==, !=) in JavaScript is that double comparison operators perform implicit type conversion on the operands before comparing them whereas, with the triple comparison operators, no type conversion is performed (i.e., the values must be equal and the types must be the same for the operands to be considered equal).

As a simple example, the expression 123 == '123' will evaluate to true, whereas 123 === '123' will evaluate to false.

Q: What is the significance of including 'use strict' at the beginning of a JavaScript source file?

Though there is much more to be said on the topic, the short and most important answer here is that use strict is a way to voluntarily enforce stricter parsing and error handling on your JavaScript code at runtime. Code errors that would otherwise have been ignored or would have failed silently will now generate errors or throw exceptions. In general, it is a good practice.

包起来

的JavaScript可能是当今最被人们误解和低估的编程语言之一。剥JavaScript洋葱的人越多,就越意识到可能。 JavaScript具有足够的通用性,可供前端和后端开发人员使用。因此,在美国或国外找到真正的全职或兼职角色语言的主人是一项挑战。我们希望您发现本文中提出的问题为“将麦子从谷壳中分离出来”提供有用的基础,以帮助您最好的JavaScript开发人员中的“精英”加入您的开发团队。

热门的JavaScript精选出版物

顶级JavaScript开发人员需求很高。

开始招聘