Javascript的闭包,匿名函数,自动调用

news2024/11/26 8:20:22

这里写目录标题

    • 验证文本框
    • HTML
    • Javascript
    • 分析
      • var引起的赋值错误
      • 最优的解决方案forEach(function(item){})
      • 最简单的方式,const/let 申明一个局部变量
      • 直接使用函数
      • 通过声明函数变量的方式定义函数
      • 申明匿名函数和自动调用函数的区别

在案例的基础上分析。

验证文本框

在这里插入图片描述

HTML

<p id="help">Helpful notes will appear here</p>
<p>E-mail: <input type="text" id="email" name="email"></p>
<p>Name: <input type="text" id="name" name="name"></p>
<p>Age: <input type="text" id="age" name="age"></p>

Javascript

function showHelp(help) {
  document.getElementById('help').innerHTML = help;
}

function makeHelpCallback(help) {
  return function() {
    showHelp(help);
  };
}

function setupHelp() {
  var helpText = [
      {'id': 'email', 'help': 'Your e-mail address'},
      {'id': 'name', 'help': 'Your full name'},
      {'id': 'age', 'help': 'Your age (you must be over 16)'}
    ];

  for (var i = 0; i < helpText.length; i++) {
    var item = helpText[i];
    document.getElementById(item.id).onfocus = function() {
      showHelp(item.help);
    }
  }
}
setupHelp();

分析

var引起的赋值错误

var声明的全局变量,只会把循环的最后一项进行赋值,只会显示

  var item = helpText[i];
    document.getElementById(item.id).onfocus = function() {
      showHelp(item.help);
    }

最优的解决方案forEach(function(item){})

function showHelp(help) {
  document.getElementById('help').textContent = help;
}

function setupHelp() {
  var helpText = [
    { id: 'email', help: 'Your e-mail address' },
    { id: 'name', help: 'Your full name' },
    { id: 'age', help: 'Your age (you must be over 16)' },
  ];

  helpText.forEach(function (text) {
    document.getElementById(text.id).onfocus = function () {
      showHelp(text.help);
    };
  });
}

setupHelp();

最简单的方式,const/let 申明一个局部变量

  for (var i = 0; i < helpText.length; i++) {
    let item = helpText[i];
    document.getElementById(item.id).onfocus = function() {
      showHelp(item.help);
    }
  }

直接使用函数

function makeHelpCallback(help) {
  return function() {
    showHelp(help);
  };
}

document.getElementById(item.id).onfocus = makeHelpCallback(item.help);

通过声明函数变量的方式定义函数

var makeHelpCallback = function(help){
  return function() {
    showHelp(help);
  };
}

document.getElementById(item.id).onfocus = makeHelpCallback(item.help);

申明匿名函数和自动调用函数的区别

  1. 每一次循环,把函数的引用进行赋值

    document.getElementById(item.id).onfocus = function() {
    showHelp(item.help)
    }

  2. (function())() 自动调用函数只会初始化一次,整个模块公用,所以在循环中不要用 ()()
    document.getElementById(item.id).onfocus =(function() {
    showHelp(item.help)
    })()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/616112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

未来工业的新趋势:探索智慧工厂的创新之路

随着科技的不断进步和工业的快速发展&#xff0c;智慧工厂正在逐渐改变传统的生产模式&#xff0c;成为现代工业的新趋势。智慧工厂以数字化、自动化和智能化为核心&#xff0c;通过信息技术和物联网的应用&#xff0c;实现生产线的高效运行和优化管理&#xff0c;为企业带来诸…

贾跃亭带着汽车梦回来了,FF 91 正式量产售价 220 万元

就在最近&#xff0c;许久不见的贾老板贾跃亭再度登上热搜。 原因无他&#xff0c;其 5 月 31 日召开视频发布会&#xff0c;宣布法拉第未来 FF 91 开启首批量产交付。 这一向大家画了九年的汽车大饼终于正式落地。 期间 FF 91 因为资金困境多次跳票&#xff0c;但贾老板向我…

工业树莓派的Socket通信之旅:探索智能工业应用的无限可能

一、什么是Socket通信 Socket通信是一种网络通信协议&#xff0c;用于在计算机之间进行数据传输。它提供了一种可靠的、双向的、面向连接的通信方式。通过Socket&#xff0c;计算机之间可以建立起通信链接&#xff0c;并在连接上发送和接收数据。它可以用于不同的网络协议&…

初识MYSQL组复制MGR

注&#xff1a;本文翻译自https://dev.mysql.com/doc/refman/8.0/en/group-replication.html 背景 创建容错系统的最常见方法是使组件冗余&#xff0c;换句话说&#xff0c;可以删除组件&#xff0c;而系统应继续按预期运行。这就产生了一系列挑战&#xff0c;将这类系统的复…

数据结构与算法·第5章【数组和广义表】

数组 基本操作 InitArray(&A, n, bound1, ..., boundn)DestroyArray(&A)Value(A, &e, index1, ..., indexn)Assign(&A, e, index1, ..., indexn)数组的顺序表示 两种顺序映象的方式: 以行序为主序(低下标优先)&#xff1b;以列序为主序(高下标优先)。 而 n…

Go语言学习-创建Go模块(1)

这是介绍Go语言基础特性的第一部分教程。如果你是开开开始学习Go&#xff0c;请确保你看了关于介绍Go语言语法&#xff0c;Go模块的简洁代码文章&#xff1a;启动Go 在本教程中&#xff0c;你将会创建两个模块。第一个模块是个库来被用作其他库或者应用程序来引用。第二个模块是…

msvcp140.dll重新安装的三个解决方法,解决找不到msvcp140.dll问题

msvcp140.dll是Microsoft Visual C Redistributable for Visual Studio 2015的一个重要组件&#xff0c;它是一个动态链接库文件&#xff08;DLL&#xff09;&#xff0c;包含许多用于开发和执行C程序的函数。如果它不在您的计算机上或不正确&#xff0c;您将收到一个错误消息&…

linux 部署mysql

本文介绍下Centos7中mysql的安装(Centos7以下版本中有些命令和centos7中有些不同&#xff0c;安时需注意下自己的linux版本) 事先准备 1、查看系统中是否自带安装mysql yum list installed | grep mysql ![在这里插入图片描述](https://img-blog.csdnimg.cn/e322b2f4036c4d9…

不愧是华为出来的,太强了。。。

前言 实习去了博彦科技&#xff08;外包&#xff09;&#xff0c;做的就是螺丝钉的活&#xff0c;后面还因为人效不佳&#xff0c;被开了。 正式毕业后去了另外一个做电子发票的公司&#xff0c;但是都是功能测试和一点点APP测试&#xff0c;然后经常被开发怼&#xff0c;测试…

【Linux】13. 文件操作

1. 重新认识文件 经过之前的linux命令操作、进程相关概念的学习&#xff0c;我们对于文件也并不陌生 首先需要明确以下概念&#xff1a; 即使是空文件&#xff0c;也要在磁盘当中占据空间文件 文件内容 文件属性文件操作 对文件内容的操作 或者 对文件属性的操作 或者 二者…

软件测试人到30岁+,还有出路吗???

最近一个学生也可以说是朋友&#xff0c;他遇到了一个让他困扰的职场难题&#xff0c;背景如下&#xff1a; 1&#xff09;他们公司准备搞安全测试了&#xff0c;现在有人员培训的计划&#xff0c;所以全组有学习安全测试课程的安排。 2&#xff09;他自己目前专职性能测试1年了…

基于SSM的物流仓库管理系统

摘 要 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…

“专精特新”发展概况

专精特新概念自2011年开始萌芽&#xff0c;2021年上升为国家战略&#xff0c;2022年写进二十大报告&#xff0c;顶层设计持续推进&#xff0c;旨在聚焦产业链关键环节&#xff0c;加强技术创新&#xff0c;破解核心技术“卡脖子”问题。全国各地政府从企业调研、整体设计、培育…

AI崛起:哪些职位将首当其冲?

随着人工智能的迅猛发展&#xff0c;人们普遍担心自己的工作是否会被AI取代。虽然是否能毁灭人类尚难以确定&#xff0c;但可以肯定的是&#xff0c;AI绝对会抢走某些职位。以下是十个职业&#xff0c;它们很可能是被AI取代的首批。 制造业&#xff1a;随着自动化机器人的进步…

docker-compose 搭建 zipkin 服务端

目录 基于docker-compose搭建服务端 数据库 服务器 docker-compose.yaml 问题 测试 基于docker-compose搭建服务端 数据库 我这边存储选择了Mysql存储&#xff0c;新建了 zipkin库&#xff0c;数据库脚本如下 -- -- Copyright 2015-2019 The OpenZipkin Authors -- -- Li…

Java单元测试学习(二)

Java单元测试学习&#xff08;二&#xff09; 使用测试框架JUnitMockito和单元测试覆盖率框架JaCoCo 目录结构 依赖—很好&#xff0c;这里又有个小插曲 打开页面查看覆盖率时一直显示0/0---->最后的解决方式是①添加了maven-surefire-plugin插件 <?xml version&quo…

C++中流的分类

前言 关于流本质的问题&#xff0c;其实从我刚开始学习C的时候&#xff0c;就已经存在了。当时找了不少的资料&#xff0c;不过一直处于那种知其然而不知其所以然的状态&#xff0c;关于流的本质问题我还是一直没有搞通&#xff0c;始终就是懵懵懂懂的。 不过在今天&#xff0…

智能电能表采集失败的原因和解决方法

智能电能表采集失败的原因和解决方法 智能电能表作为现代电力系统中的重要组成部分&#xff0c;在电能计量、电费结算等方面发挥着关键作用。然而&#xff0c;在实际应用过程中&#xff0c;有时会出现电能表采集失败的情况&#xff0c;这可能源于网络连接故障、数据传输错误等…

数据结构基础-堆

堆实现 计算机科学中&#xff0c;堆是一种基于树的数据结构&#xff0c;通常用完全二叉树实现。堆的特性如下 在大顶堆中&#xff0c;任意节点 C 与它的父节点 P 符合 P.value \geq C.value而小顶堆中&#xff0c;任意节点 C 与它的父节点 P 符合 P.value \leq C.value最顶层…

维护嵌入式 Linux 内核——So Easy

导读Pengutronix 内核黑客 Jan Lbbe 总结了嵌入式 Linux 中正在不断增长的安全威胁&#xff0c;并在这次欧洲嵌入式 Linux 会议上概述了一个计划&#xff0c;以保持长期设备的安全和功能完整。 安全漏洞只发生在 Windows 上的好日子正在快速过去。恶意软件黑客和拒绝服务老手们…