JavaScript的主要用途是啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript的主要用途是啥相关的知识,希望对你有一定的参考价值。
javascript是一种由Netscape的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。当时服务端需要对数据进行验证,由于网络速度相当缓慢,只有28.8kbps,验证步骤浪费的时间太多。于是Netscape的浏览器Navigator加入了Javascript,提供了数据验证的基本功能。 参考技术A 其实js就是web开发的一种脚本语言,我简单说一下使用它的好处,第一点:能够更加人性化。比如一些弹出框会进行第二次认证;第二点:可以使网站更加美观,一些动态的效果就是通过js实现的;第三点:更加的方便传输数据,能够实现部分区域的传输数据、 参考技术B javascript是html/asp/jsp页面脚本,主要负责页面数据的处理,数据的提交和页面数据的显示。比如可以动态的生成菜单,提交form,处理显示服务器传回的数据等等。 参考技术C 1、早期,简单的表单验证,这个是js最初的起点;2、鼎盛期,富媒体网页,web2.0网站大量使用ajax,使得以js为主的富媒体网页大量盛行,不但给网站带来带来耳目一新的感觉,而且ajax还提高了执行速度,所以一段时间内极度流行;
3、现在,web2.0的热度退去,所以js的应用在一定程度上也减少了很多,而且Silverlight、IE9、GPU、HTML5等关键词的出现、流行,相信很快会进入网页3D时代。至于js,慢慢变得边缘化,不会是主流,但是也不会被抛弃。
JavaScript 中嵌套函数的需求和用途是啥
【中文标题】JavaScript 中嵌套函数的需求和用途是啥【英文标题】:Whats the need and use of nested functions in JavaScriptJavaScript 中嵌套函数的需求和用途是什么 【发布时间】:2017-11-12 22:31:27 【问题描述】:我了解嵌套函数是什么,但我不明白为什么我们首先需要嵌套函数。有没有只能通过在 JavaScript 中使用嵌套函数来解决的问题。我看到的所有创建嵌套函数的示例都可以在不在函数内部创建函数的情况下进行编码,并且结果相同。那么哪个问题需要创建嵌套函数,并且只能/有效地通过使用嵌套函数来解决。
【问题讨论】:
可能相关:***.com/questions/2728278/… @F***Lauer 我在等着有人说嵌套函数只在创建闭包时才有用。 隐私只能通过嵌套函数来实现,大多数模块系统也依赖于闭包,以免污染全局命名空间。如果没有闭包,您要么必须在全局命名空间中的某处注册所有内容,其他所有脚本都可以访问和修改它,或者您必须将内部状态之类的东西作为参数传递给该类的每个公共函数。所以基本上你没有任何内部状态了,只有公共状态。 【参考方案1】:这不是关于效率,而是关于范式。如果您使用脚本范例,您可以无需担心地编写代码。如果使用经典范式,则需要定义类但不需要嵌套函数。尽管如此,在脚本和经典中,如果您愿意,您可以使用嵌套函数。
只有当你切换到函数式范式,也就是真正的 JavaScript 的“原生”范式时,在某些情况下你需要嵌套函数。
只要您不使用函数式编程,您就无法充分利用 javascript 的所有功能。这是一个使用 闭包 的工厂示例,否则无法完成(嵌套函数还有其他几种用途,而不仅仅是闭包):
function create(a, b)
function compute()
return a + b;
return
"compute": compute
;
用户代码会这样做:
f = create(19, 73);
无需计算任何东西。比如说,计算它需要很多时间,除非必要,否则你不想计算它。您现在可以将函数 f
传递给不属于您的其他代码(例如 jQuery 事件处理程序代码):
$("#id").on("click", function () console.log(f.compute()); );
当您单击#id
时,此f
将被执行,但您无能为力。在调用create()
时,参数a
和b
已经嵌入。
这意味着您可以隐藏信息并利用上下文范围。想象一下,creator 和 user 是两个不同的代码库,不是由同一个人编写的。或者 a
和 b
是其他代码库的机密。
查看我在上面的文字中散布的各种单词,以了解有关函数式编程的更多信息。
如果您想知道为什么我们不能没有,请查看 currying 和 monads,它们是函数式范例的基本组成部分。您需要一些机制来执行这些基本操作,否则范式将无法正常运行。
【讨论】:
【参考方案2】:嵌套函数的核心重要性是作用域生成。我们需要在 JavaScript 中嵌套函数和作用域来实现以下目标。
-
Non-Polluted Global Namespace
Modularization 的功能
封装modules的私有内部工作
防止标识符在不同脚本之间发生冲突
由于嵌套范围内的变量符合minification 的条件,因此脚本大小更小。
它加快了Identifier Resolution Process
这是一个示例模块,展示了函数嵌套和作用域提供的封装功能:
var notificationService = (function ($, toastr, undefined)
var _externals = ,
_jqExtend = $.extend;
/*
* Private Methods
*/
function _showMessage(params)
params = params || ;
toastr.remove();
if (typeof (params.title) === "undefined")
toastr[params.method](params.msg);
else
toastr[params.method](params.msg, params.title);
/*
* Public Members
*/
_externals.clear = function ()
toastr.remove();
;
_externals.showError = function (params)
params = params || ;
_jqExtend(params,
method: "error"
);
_showMessage(params);
;
_externals.showInfo = function (params)
params = params || ;
_jqExtend(params,
method: "info"
);
_showMessage(params);
;
_externals.showSuccess = function (params)
params = params || ;
_jqExtend(params,
method: "success"
);
_showMessage(params);
;
_externals.showWarning = function (params)
params = params || ;
_jqExtend(params,
method: "warning"
);
_showMessage(params);
;
return _externals;
)(jQuery, toastr);
上面的代码让我们能够控制要公开哪些内容。在这种特定情况下,所有附加到 _externals 对象的成员都通过对 notificationService 对象的引用暴露给全局命名空间。如果不使用范围,内部成员(_jqExtend 和 _showMessage)也将附加到窗口对象,并增加浏览器解析标识符引用所需的工作量。
【讨论】:
【参考方案3】:首先,在编程中,做一个任务的方法有很多种,但是其中我们要选择一种在内存和执行时间上效率更高,速度更快的方法。当你需要从主程序切换到子程序时如果子程序的大小更小,那么上下文切换的时间不仅仅是执行内联任务。所以总的来说,如果大小更小,否则你总是有备用路径。嵌套函数也可以访问“上面”的范围它们。它将减少将参数传递给函数并在程序中的其他地方重用它的麻烦。所有上述变量和函数都可以访问这个嵌套函数并可以更新它们。..
【讨论】:
【参考方案4】:JavaScript 变量可以属于本地或全局范围。
可以使用闭包将全局变量设为本地(私有)。
JS 中的函数就像变量一样,所以如果想使用嵌套函数供本地使用。
这是一个很好的example
【讨论】:
以上是关于JavaScript的主要用途是啥的主要内容,如果未能解决你的问题,请参考以下文章