广告
返回顶部
首页 > 资讯 > 精选 >JavaScript中的求值策略有哪些
  • 340
分享到

JavaScript中的求值策略有哪些

2023-06-14 21:06:21 340人浏览 薄情痞子
摘要

javascript中的求值策略有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点击,给

javascript中的求值策略有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

JavaScript可以做什么

1.可以使网页具有交互性,例如响应用户点击,给用户提供更好的体验。2.可以处理表单,检验用户的输入,并提供及时反馈节省用户时间。3.可以根据用户的操作,动态的创建页面。4使用JavaScript可以通过设置cookie存储在浏览器上的一些临时信息。

一栗以蔽之

function changeStuff(a, b, c) {  a = a * 10;  b.item = "changed";  c = {item: "changed"};}var num = 10;var obj1 = {item: "unchanged"};var obj2 = {item: "unchanged"};changeStuff(num, obj1, obj2);console.log(num);         // 10console.log(obj1.item);   // changedconsole.log(obj2.item);   // unchanged

如果说js中函数的参数传递是按值传递,那么在函数changeStuff内部改变b.item的值将不会影响外部的obj1对象的值。

如果说JS中函数的参数传递是按引入传递,那函数changeStuff内部所做的改变将会影响到函数外部所有的变量定义,num将会变成100、obj2.item将会变成changed。很显然实际不是这样子的。

所以不能说JS中函数的参数传递严格按值传递或按引入传递。总的来说函数的参数都是按值传递的。JS中还采用一种参数传递策略,叫按共享传递。这要取决于参数的类型。

如果参数是基本类型,那么是按值传递的;

如果参数是引用类型,那么是按共享传递的。

参数传递

ECMAScript 中所有函数的参数都是按值传递的。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。基本类型值的传递如同基本类型变量的复制一样,而引用类型值的传递,则如同引用类型变量的复制一样。-- 《JavaScript高级程序设计》

按值传递

JavaScript中基本类型作为参数的策略为按值传递(call by value):

function foo(a) {  a = a * 10;}var num = 10;foo(num);console.log(num); // 10 没有变化

这里看到函数内部参数的改变并没有影响到外部变量。按值传递没错。

按共享传递

JavaScript中对象作为参数传递的策略为按共享传递(call by sharing):

修改参数的属性将会影响到外部对象

重新赋值将不会影响到外部对象

按上面栗子函数内部修改了参数b的属性item,会影响到函数外部对象,因而obj1的属性item也变了。

function bar(b) {  b.item = "changed";  console.log(b === obj1) // true}var obj1 = {item: "unchanged"};bar(obj1);console.log(obj1.item);   // changed 修改参数的属性将会影响到外部对象

从b === obj1打印结果为true可以看出,函数内部修改了参数的属性并没有影响到参数的引用。b和obj1共享一个对象地址,所以修改参数的属性将会影响到外部对象。

而将参数c重新赋值一个新对象,将不会影响到外部对象。

function baz(c) {  c = {item: "changed"};  console.log(c === obj2) // false}var obj2 = {item: "unchanged"};baz(obj2);console.log(obj2.item);   // unchanged 重新赋值将不会影响到外部对象

将参数c重新赋值一个新对象,那么c就绑定到了一个新的对象地址,c === obj2打印结果为false,判断他们不再共享同一个对象地址。它们各自有独立的对象地址。所以重新赋值将不会影响到外部对象。

总结

可以说按共享传递是按值传递的特例,传递的是引用地址的拷贝。所以红宝书上说的也没错。

可以把 ECMAScript 函数的参数想象成局部变量。-- 《JavaScript高级程序设计》

延伸 - 惰性求值

前面了解到了所有函数的参数都是按值传递的。JavaScript 中参数是必须先求值再作为实参传入函数的。但是在es6中有一个特例。

参数默认值不是传值的,而是每次都重新计算默认值表达式的值。也就是说,参数默认值是惰性求值的。 -- 《ECMAScript 6 入门

let x = 99;function foo(p = x + 1) {  console.log(p);}foo() // 100x = 100;foo() // 101

上面代码中,参数p的默认值是x + 1。这时,每次调用函数foo,都会重新计算x + 1,而不是默认p等于 100

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: JavaScript中的求值策略有哪些

本文链接: https://www.lsjlt.com/news/275129.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中的求值策略有哪些
    JavaScript中的求值策略有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点击,给...
    99+
    2023-06-14
  • 详细讨论JavaScript中的求值策略
    目录一栗以蔽之参数传递按值传递按共享传递总结延伸 - 惰性求值最近在研究 lambda演算 中的 η-变换 在JavaScript中的应用,偶然在 stackoverflow 上看到...
    99+
    2022-11-12
  • JavaScript同源策略有哪些
    本篇文章给大家分享的是有关JavaScript同源策略有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。JavaScript是什么JavaScript是一种直译式的脚本语言,...
    99+
    2023-06-14
  • MySQL中有哪些优化策略
    MySQL中有哪些优化策略,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。单表优化除非单表数据未来会一直不断上涨,否则不要一开始...
    99+
    2022-10-18
  • Spring 中的同步策略有哪些?如何选择最佳策略?
    Spring 是一款广泛使用的开源 Java 框架,它为开发者提供了许多便利的功能和工具。在 Spring 中,同步策略是一个非常重要的主题,因为它涉及到多线程和并发的处理。本文将介绍 Spring 中的同步策略及其选择最佳策略的方法。 同...
    99+
    2023-09-22
    面试 同步 spring
  • cdn的回源策略有哪些
    1.预拉取策略对于大型活动,可以使用预拉取系统来触发相应的回源请求,避免由用户触发,从而提高用户的体验。异步回源策略为避免回源时造成的用户访问等待问题,异步回源时给用户返回会设置Cache-Control: max-age=0,以避免用户缓...
    99+
    2022-10-13
  • Redis缓存中的淘汰策略有哪些
    本篇内容主要讲解“Redis缓存中的淘汰策略有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Redis缓存中的淘汰策略有哪些”吧!我们知道Redis缓存使用...
    99+
    2022-10-18
  • RMAN中的备份保留策略有哪些
    这篇文章主要介绍了RMAN中的备份保留策略有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。RMAN中提供了两种备份保留策略:基于时间和基...
    99+
    2022-10-18
  • 负载均衡的策略有哪些
    负载均衡的策略有:轮询,每个请求都要按顺序分派到不同的后端网络服务器。特定权重,用于后端开发网络服务器性能不匀的状况。IP关联ip_hash,每个请求按浏览ip的hash结果分派,这样就会让每一个浏览量固定不动浏览一个后端开发网络服务器,能...
    99+
    2022-10-18
  • MySQL中有哪些日志维护策略
    这篇文章给大家介绍MySQL中有哪些日志维护策略,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。日志类型:MySQL有几个不同的日志文件,可以帮助你找出mysqld内部发生的事情:&nb...
    99+
    2022-10-18
  • vue中加载优化策略有哪些
    这篇文章主要介绍了vue中加载优化策略有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法一 路由懒加载首屏加载慢的原因无非就是单页面应...
    99+
    2022-10-19
  • Java中有哪些内存分配策略
    本篇文章给大家分享的是有关Java中有哪些内存分配策略,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 Java内存分配简单的说Java把内存划分成两种:一种是栈内存,...
    99+
    2023-06-17
  • Angular中的onPush变更检测策略有哪些
    这篇文章给大家介绍Angular中的onPush变更检测策略有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。默认的变更检测策略默认情况下,Angular使用ChangeDetect...
    99+
    2022-10-19
  • java中线程池的拒绝策略有哪些
    本篇文章为大家展示了java中线程池的拒绝策略有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对...
    99+
    2023-06-14
  • 计算机网络中路由策略和策略路由的区别有哪些
    这篇文章主要介绍计算机网络中路由策略和策略路由的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!区别:路由策略是通过修改路由表的路由条目来控制数据流量的可达性;而策略路由是通过用户制定的策略进行转发,且该策略...
    99+
    2023-06-14
  • angularJs指令的绑定策略有哪些
    这篇文章主要为大家展示了“angularJs指令的绑定策略有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“angularJs指令的绑定策略有哪些”这篇文章吧...
    99+
    2022-10-19
  • 云主机的防护策略有哪些
    云主机的防护策略:1. 构建防御系统,在防火墙中设置过滤规则,抵御网络入侵和流量攻击。2. 定期进行数据与系统备份,确保数据安全。3. 在安装系统时要采用NTFS格式,对分区进行格式化,加强云主机的安全性。具体内容如下:构建防御系统为了防止...
    99+
    2022-10-06
  • 预防cc攻击的策略有哪些
    预防cc攻击的策略有:1、在IIS上取消域名绑定,让CC攻击失去目标,但对于别人的访问会带来不便;2、使用域名欺骗解析技术,能实现攻击者自己攻击自己;3、更改Web对外提供服务的端口,能有效预防cc攻击;4、查看CC攻击的源IP,在IIS中...
    99+
    2022-10-04
  • 云主机的防御策略有哪些
    云主机的防御策略:1. 构建防御系统,在防火墙中设置过滤规则,监视服务器出入口。2.不定期进行数据与系统备份,避免数据无法恢复,确保数据安全。3. 在安装系统时进行NTFS分区格式化,提高云主机的安全性。具体内容如下:构建防御系统为了防止非...
    99+
    2022-10-07
  • SEO中的外部链接建设策略有哪些
    外部链接建设在SEO中扮演着重要角色,主要包括以下几个策略:1、高质量内容创建、2、客座博客发表、3、业界合作与合作伙伴链接、4、使用社交媒体、5、提交到网站目录、6、PR和新闻发布。高质量内容创建能自然吸引外部链接。客座博客和业界合作则提...
    99+
    2023-10-29
    策略 链接 有哪些
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作