前端知识点---箭头函数(javascript)

news/2024/11/25 14:33:33/

文章目录

  • 箭头函数(javascript)
    • 箭头函数
      • 省略小括号
      • 省略大括号
      • 箭头函数与没有arguments
      • this的指向问题

javascript_1">箭头函数(javascript)

箭头函数

引子:

<input type="text" id="txt1" ><input type="button" id="btn"  value="测试">
javascript">function test(val){console.log(val);        }
//如何调用呢?
btn.onclick = test(txt1.value)
这是错误的 , 因为函数调用和事件处理机制发生了冲突
你的预期是点击时调用函数 , 实际上test(txt1.value) 在代码赋值时已经被调用了,并返回其执行结果。
正确的做法:
把函数引用赋值给 btn.onclick,而不是调用函数的返回值。
如果需要传递参数,则应通过 匿名函数 或 箭头函数 包装

使用匿名函数如下:

javascript">btn.onclick=function ()
{test(txt1.value);
}

下面开始介绍箭头函数写法:

javascript">btn.onclick =()=>test(txt1.value);
省略了function 直接用箭头映射

省略小括号

javascript">   var test = function (a){console.log(111,a);       }用箭头函数写法:var test=(a)=>{console.log(111,a)}当只有一个参数的时候可以省略小括号var test= a =>{console.log(111,a)}两个参数以及以上必须有小括号var test =(a,b)=>{console.log(111,a,b);}大括号也能省略只有在只有一个返回值, 也就是说只有一句代码的时候可以省略var text =a => 100*a;相当于:var text=(a)=>{return 100*a;}console.log(test(10));

引子:
把aaa bbb ccc创建成li并插入到页面的ul里面

javascript">// 写一个数组var list =["aaa","bbb","ccc"]// 用document.createElement可以// 还有个简单的方法 可以转换数组中的元素var newList = list.map(function(item){// 参数是一个函数 这个函数返回值是什么 就映射成什么return "星之卡比"}
)
console.log(newList);

在这里插入图片描述
那如何把aaa bbb ccc创建成li并插入到页面的ul里面

javascript"> var newList = list.map(function(item){return `<li>${item}</li>`//模版字符串}

在这里插入图片描述

省略大括号

用箭头函数改造一下
上面说了只有一个形参的时候可以省略大括号

javascript">var newList = list.map(item =>  `<li>${item}</li>` )
//给map送进去一个箭头函数 送进去item 吐出来是<li>${item}</li>
//再用一个join 就可以往页面里面插入了 
console.log(newList.join(""));

上面将的是数组 , 如果是返回值是一个对象还能这样写吗

javascript">// 如果返回值是一个对象 
var test =() =>{return {name:"卡比"}
}
console.log(test());

满足了 return只有一句话的标准 试着改写

javascript">var test =() => {name:"卡比"
}
console.log(test());
//结果是undefined
// 浏览器不知道{}里是对象 他以为他括号是函数 
var test =() =>( {name:"卡比"
})
console.log(test());
// 所以在大括号外面加上小括号 避免乱套 

箭头函数与没有arguments

javascript"> var test =function(){console.log(arguments);//没有map方法 arguments是伪数组console.log(Array.from(arguments));}test(1,2,3)// 1,2 ,3// 箭头函数没法拿到argumentsvar test = () =>{console.log(arguments);}test(1,2,3,4)//arguments is not defined

this的指向问题

javascript"><script>const obj1 = {name: 'Alice',arrowFunc: () => {console.log(this.name);}
};
obj1.arrowFunc(); // undefined, 因为箭头函数中的 this 绑定的是全局对象
// 而普通函数会绑定到调用它的对象:const obj2 = {name: 'Alice',normalFunc: function() {console.log(this.name);}
};
obj2.normalFunc(); // 输出 'Alice'
</script>

http://www.ppmy.cn/news/1549841.html

相关文章

Leetcode打卡:最小区间

执行结果&#xff1a;通过 题目&#xff1a;632 最小区间 你有 k 个 非递减排列 的整数列表。找到一个 最小 区间&#xff0c;使得 k 个列表中的每个列表至少有一个数包含在其中。 我们定义如果 b-a < d-c 或者在 b-a d-c 时 a < c&#xff0c;则区间 [a,b] 比 [c,d] …

cocos creator 3.8 打飞机Demo 9

简单的demo实现&#xff0c;没优化以及加上音频文件&#xff0c;没有开始结束暂停等逻辑。 首先2D状态下&#xff0c;接受的素材 1、首先实现背景的移动 基本逻辑如下 关于fixUpdate&#xff0c;可以写一个基类&#xff0c;然后继承它 //固定帧计时private _now_time 0;//固定…

RHCE——DNS域名解析服务器

1、DNS简介 DNS是互联网上的一项服务&#xff0c;它作为将域名和IP地址相互映射的一个分布式 数据库&#xff0c;能够使人更方便的访问互联网。 &#xff08;1&#xff09;因特网的域名结构 因特网在命名时采用的是层次树状结构的命名方法。任何一个连接在 因特网上的主机或路…

Python MySQL通过Binlog 获取变更记录 恢复数据

通过MySQL的二进制日志&#xff08;Binlog&#xff09;获取数据库的变更记录&#xff0c;并用于恢复数据&#xff0c;是一个相对高级的操作。这通常涉及读取Binlog中的事件&#xff0c;解析这些事件以了解数据变更的详细信息&#xff0c;然后基于这些信息来恢复或回滚数据。 在…

设计模式之 命令模式

命令模式&#xff08;Command Pattern&#xff09;是行为型设计模式之一&#xff0c;它将请求&#xff08;或命令&#xff09;封装成一个对象&#xff0c;从而使用户能够将请求发送者与请求接收者解耦。通过命令模式&#xff0c;调用操作的对象与执行操作的对象不直接关联&…

前端工程化-node/npm/babel/polyfill/webpack 一文速通

文章主要介绍了前端工程化的相关内容&#xff0c;包括 Node 环境、npm 包管理器及其命令、配置和镜像&#xff0c;package.json 文件&#xff0c;babel 和 polyfill 用于解决 JavaScript 兼容性问题&#xff0c;以及 webpack 这一前端构建工具的作用、核心概念、构建流程、安装…

BEV:显示相机视角转换-----FastBEV/IPM与LSS

一、背景 BEV方案中&#xff0c;将图像视角转换到BEV视角的方法对模型性能影响较大&#xff0c;FastBEV的速度较快&#xff0c;但投影效果上限不高&#xff0c;LSS投影上限较高&#xff0c;但速度较慢 &#xff08;耗时相对较高&#xff09;。是否有折中的方案&#xff0c;在耗…

AI 在软件开发流程中的优势、挑战及应对策略

AI 在软件开发流程中的优势、挑战及应对策略 随着人工智能技术的飞速发展&#xff0c;AI大模型正在逐步渗透到软件开发的各个环节&#xff0c;从代码自动生成到智能测试&#xff0c;AI的应用正在重塑传统的软件开发流程。本篇文章将分析AI在软件开发流程中带来的优势&#xff0…