Nimisha Mukherjee 发布的文章

通过深入了解 JavaScript 的高级概念之一:闭包,更好地理解 JavaScript 代码的工作和执行方式。

 title=

在《JavaScript 如此受欢迎的 4 个原因》中,我提到了一些高级 JavaScript 概念。在本文中,我将深入探讨其中的一个概念: 闭包 closure

根据 Mozilla 开发者网络(MDN),“闭包是将一个函数和对其周围的状态(词法环境)的引用捆绑在一起(封闭)的组合。”简而言之,这意味着在一个函数内部的函数可以访问其外部(父)函数的变量。

为了更好地理解闭包,可以看看作用域及其执行上下文。

下面是一个简单的代码片段:

var hello = "Hello";

function sayHelloWorld() {
    var world = "World";
    function wish() {
        var year = "2021";
        console.log(hello + " " + world + " "+ year);
    }
    wish();
}
sayHelloWorld();

下面是这段代码的执行上下文:

 title=

每次创建函数时(在函数创建阶段)都会创建闭包。每个闭包有三个作用域。

  • 本地作用域(自己的作用域)
  • 外部函数范围
  • 全局范围

我稍微修改一下上面的代码来演示一下闭包:

var hello = "Hello";

var sayHelloWorld = function() {
    var world = "World";
    function wish() {
        var year = "2021";
        console.log(hello + " " + world + " "+ year);
    }
    return wish;
}
var callFunc = sayHelloWorld();
callFunc();

内部函数 wish() 在执行之前就从外部函数返回。这是因为 JavaScript 中的函数形成了闭包

  • sayHelloWorld 运行时,callFunc 持有对函数 wish 的引用。
  • wish 保持对其周围(词法)环境的引用,其中存在变量 world

私有变量和方法

本身,JavaScript 不支持创建私有变量和方法。闭包的一个常见和实用的用途是模拟私有变量和方法,并允许数据隐私。在闭包范围内定义的方法是有特权的。

这个代码片段捕捉了 JavaScript 中闭包的常用编写和使用方式:

var resourceRecord = function(myName, myAddress) {
    var resourceName = myName;
    var resourceAddress = myAddress;
    var accessRight = "HR";
    return {
        changeName: function(updateName, privilege) {
            // only HR can change the name
            if (privilege === accessRight ) {
                resourceName = updateName;
                return true;
            } else {
                return false;
            }
        },  
        changeAddress: function(newAddress) {
            // any associate can change the address
            resourceAddress = newAddress;          
        },  
        showResourceDetail: function() {
            console.log ("Name:" + resourceName + " ; Address:" + resourceAddress);
        }
    }
}
// Create first record
var resourceRecord1 = resourceRecord("Perry","Office");
// Create second record
var resourceRecord2 = resourceRecord("Emma","Office");
// Change the address on the first record
resourceRecord1.changeAddress("Home");
resourceRecord1.changeName("Perry Berry", "Associate"); // Output is false as only an HR can change the name
resourceRecord2.changeName("Emma Freeman", "HR"); // Output is true as HR changes the name
resourceRecord1.showResourceDetail(); // Output - Name:Perry ; Address:Home
resourceRecord2.showResourceDetail(); // Output - Name:Emma Freeman ; Address:Office

资源记录(resourceRecord1resourceRecord2)相互独立。每个闭包通过自己的闭包引用不同版本的 resourceNameresourceAddress 变量。你也可以应用特定的规则来处理私有变量,我添加了一个谁可以修改 resourceName 的检查。

使用闭包

理解闭包是很重要的,因为它可以更深入地了解变量和函数之间的关系,以及 JavaScript 代码如何工作和执行。


via: https://opensource.com/article/21/2/javascript-closures

作者:Nimisha Mukherjee 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

JavaScript 之所以能在编程语言中名列前茅,是有充分的理由的。

如 GitHub 的 The State of the Octoverse 报告的这张图所示,如果按 GitHub 上项目的贡献者数量统计,JavaScript 一直是最受欢迎的编程语言。

 title=

热门语言,根据《The State of the Octoverse》(©2019,GitHub Corp

在本系列的 上一篇 中,我们深入了解了 JavaScript 的历史。在这篇文章中,我将分享它如此受欢迎的四个原因

1、JavaScript 适合初级、中级和高级开发人员

JavaScript 不需要任何环境设置,只要打开浏览器,比如 Chrome 浏览器,导航到开发者工具,就可以开始编码。编写一个 “Hello World” 的程序,就这么简单:

console.log("Hello World");

JavaScript 的灵活性最适合中级开发人员。该语言通过让开发人员专注于解决问题来帮助你完成任务。开发者可以混合使用插件和自己的代码片段来让一个应用程序工作。

虽然 JavaScript 比较容易上手,但它也并不是一下子就能掌握的。如果你想达到高级水平,这里有一些你需要了解的概念:

  • JavaScript 的多范式特性: JavaScript 同时支持函数式编程和面向对象编程(OOP)。
  • 在 JavaScript 中应用设计模式 模型-视图-*(MV*)设计模式一直是最流行的模式之一,并促成了多个现代框架的发展。
  • 带原型链的继承 JavaScript 由于其动态的特性,无法实现传统的 Java 基于类的模式下的 OOP。JavaScript 中的 OOP 是通过原型继承模型实现的。
  • 闭包 闭包可以从内部函数中访问外部函数的作用域。
  • 柯里化 Currying 柯里化是函数的一种转换,它将函数从 f(a, b, c) 的调用形式转换为 f(a)(b)(c) 调用形式。
  • PromisesObservables 这些可以帮助你处理异步函数。
  • TypeScript 在 JavaScript 中添加了静态类型。

2、全平台

JavaScript 可以在任何地方运行,包括:

  • 手机、平板电脑和笔记本电脑等设备。
  • 在客户端和服务器端。

这种在任何地方都能运行的能力使 JavaScript 成为一种通用语言。

3、开放标准和社区

ECMAScript 是 JavaScript 的标准化版本,也是一种开放的标准语言。公司可以使用 ECMAScript 来创建 JavaScript 的实现。根据维基百科,“ECMAScript 引擎是执行以 ECMAScript 语言标准编写的源代码(例如,JavaScript)的程序”。最流行的引擎 V8SpiderMonkey 是开源项目。

JavaScript 已经存在了 25 年,背后有一个庞大的社区。开发者们简直目不暇接,社区已经构建了如此多的插件和框架,以至于创造了“框架疲劳”这个词。

4、现代框架

现代框架如 ReactAngularVue.js 已经稳定下来,并且正在进行优化以获得更好的性能。大多数框架对开发者非常友好,有良好的社区支持。

未来

JavaScript 将长期存在。全栈开发和现代前端框架继续帮助 JavaScript 巩固其作为最受欢迎的编程语言之一的地位。

JavaScript 的下一波可能会将焦点放在。

  • Deno JavaScript 的现代安全运行时。
  • 网络组件: 可重复使用的自定义元素。
  • 与 AI 和 ML 的整合:SupernovaBAYOU 这样的项目在将 JavaScript 与人工智能和机器学习整合方面取得了实质性的突破。

via: https://opensource.com/article/20/11/javascript-popular

作者:Nimisha Mukherjee 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

从最开始作为一种使网站变得漂亮的方式,JavaScript 已转变为一种严肃的编程语言。

JavaScript 的卑微起步始于 1995 年,是由当时在 Netscape 通信公司工作的 Brendan Eich 在短短 10 天内创建的。从那时起,JavaScript 已经走过了漫长的道路,从一个让网站变得漂亮的工具变成了一种严肃的编程语言。

在其早期,JavaScript 被认为是一种视觉工具,它使网站变得更有趣和更有吸引力。像 Jakarta Server Pages(即 JSP,以前称作 JavaServer Pages)这样的语言曾经用来完成渲染网页的繁重工作,而 JavaScript 则被用来创建基本的交互、视觉增强和动画。

长期以来,HTML、CSS 和 JavaScript 之间的分界并不明确。前端开发主要由 HTML、CSS 和 JavaScript 组成,形成了标准 Web 技术的“多层蛋糕”。

 title=

标准网络技术的“多层蛋糕”(Mozilla 开发者网络,CC BY-SA 4.0

HTML 和 CSS 为内容提供结构、格式和样式。一旦网页要做一些超越了显示静态内容的事情,就是 JavaScript 的用武之地。Ecma 国际部开发了 JavaScript 规范, 万维网联盟 World Wide Web Consortium (W3C)开发了 HTML 和 CSS 规范。

JavaScript 是如何获得突出地位的

JavaScript 是如何成为最受欢迎的编程语言的,背后有一段漫长的历史。早在 20 世纪 90 年代,Java 是王者,不可避免的人们会与它进行比较。许多工程师认为 JavaScript 不是一门好的编程语言,因为它缺乏对面向对象编程的支持。尽管当时并不明显,但其实 JavaScript 的对象模型和功能特性在其第一个版本中就已经出现了。

1995 年 JavaScript 匆匆发布后,网景公司将其提交给了 欧洲计算机制造商协会 European Computer Manufacturers Association (ECMA)国际部进行标准化。由此产生了 ECMAScript,这是一个 JavaScript 标准,旨在确保不同 Web 浏览器之间网页的互操作性。ECMAScript 1 于 1997 年 6 月问世,帮助推进了 JavaScript 的标准化。

在此期间,PHP 和 JSP 成为了服务器端编程语言的流行选择。JSP 作为 通用网关接口 Common Gateway Interface CGI)的首选替代方案获得了突出的地位,因为它可以在 HTML 中嵌入 Java 代码。虽然它很受欢迎,但开发人员发现将 Java 嵌入 HTML 中是不自然的。此外,即使是 HTML 上最简单的文本变化,JSP 也必须经历一个耗时的生命周期。在今天的微服务世界里,面向 JSP 的页面被认为是技术债务。

PHP 的工作原理与 JSP 类似,但 PHP 代码以一个通用网关接口(CGI)的可执行文件来处理。基于 PHP 的 Web 应用比基于 JSP 的应用更容易部署。总的来说,使用 PHP 更容易上手和运行。今天,PHP 和 JavaScript 是创建动态网站最流行的组合之一:PHP 作为服务器端脚本,JavaScript 作为客户端脚本。

伴随着 2006 年 jQuery 的发布,JavaScript 的应用越来越多。jQuery 是一个多用途的 JavaScript 库,简化了繁琐的 文档对象模型 Document Object Model (DOM)管理、事件处理和 Ajax)。

2009 年 Node.js 的发布是 JavaScript 发展的转折点。开发者现在可以用 JavaScript 编写服务器端脚本了。紧随其后的是 2010 年发布的 Backbone.jsAngularJS 等框架。这导致了出现了使用单一语言进行全栈开发的概念。

2015 年,Ecma 国际部发布了 ECMAScript 6(ES6),它为编写复杂的应用程序增加了包括类声明在内的重要新语法。其他新特性还包括迭代器、箭头函数表达式、letconst 关键字、类型化数组、新的集合(映射、集合和 WeakMap)、Promise、字符串的模板字元以及许多其它很酷的特性。后来的版本又继续增加了更多的功能,使 JavaScript 更加强大、精简和可靠。

总结

在过去的 20 年里,JavaScript 有了长足的进步。现在大多数浏览器都在争相满足合规性,因此最新的规范推出得更快。

根据你的项目需求,有大量稳定的 JavaScript 框架可供选择,包括最流行的 ReactAngularVue.js 等等。在本系列的下一篇文章中,我将深入探讨为什么 JavaScript 如此受欢迎。


via: https://opensource.com/article/20/10/history-javascript

作者:Nimisha Mukherjee 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出