首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用javascript,如何让我的函数在其中使用不同的引用函数?

使用javascript,如何让我的函数在其中使用不同的引用函数?
EN

Stack Overflow用户
提问于 2022-08-05 09:04:27
回答 1查看 28关注 0票数 0

对于如下函数,在pixel.addEventListener行(“mouseover”,经典);我希望能够将经典函数引用与其他函数引用交换,因为我有使用相同函数的按钮,但只交换了该行中的函数引用。现在,我已经复制和粘贴了整个函数的3个不同的时间,在这一行中有不同的引用函数,但我知道一定有一个更优雅的解决方案。我尝试为这个函数创建一个论点,但它似乎不起作用。

resolutionChange函数的调用如下:

代码语言:javascript
运行
AI代码解释
复制
window.onload = resolutionChange;
...
slider.addEventListener("click", resolutionChange);
代码语言:javascript
运行
AI代码解释
复制
function resolutionChange(e) {
  const otherbuttons = document.querySelectorAll("button");
  otherbuttons.forEach((button) => {
    button.classList.remove("buttonclicked");
  });

  const button = document.querySelector("#classic");
  button.classList.add("buttonclicked");

  let pixel = document.querySelectorAll(".pixel");
  pixel.forEach((pixel) => {
    pixel.remove();
  });

  let slider = document.querySelector(`#slider`);
  let res = slider.value;

  for (let i = 0; i < res * res; i++) {
    let pixel = document.createElement("div");
    pixel.classList.add("pixel");
    pixel.setAttribute(
      "style",
      `width: ${512 / res}px; height: ${512 / res}px;`
    );
    pixel.addEventListener("mouseover", classic);
    mainholder.appendChild(pixel);
  }
}

我希望我能做这样的事:

代码语言:javascript
运行
AI代码解释
复制
function resolutionChange(func) {
  const otherbuttons = document.querySelectorAll("button");
  otherbuttons.forEach((button) => {
    button.classList.remove("buttonclicked");
  });

  const button = document.querySelector("#classic");
  button.classList.add("buttonclicked");

  let pixel = document.querySelectorAll(".pixel");
  pixel.forEach((pixel) => {
    pixel.remove();
  });

  let slider = document.querySelector(`#slider`);
  let res = slider.value;

  for (let i = 0; i < res * res; i++) {
    let pixel = document.createElement("div");
    pixel.classList.add("pixel");
    pixel.setAttribute(
      "style",
      `width: ${512 / res}px; height: ${512 / res}px;`
    );
    pixel.addEventListener("mouseover", func);
    mainholder.appendChild(pixel);
  }
}

我似乎无法找到能够使用resolutionChange函数块代码的解决方案,因此我可以这样使用它,例如

代码语言:javascript
运行
AI代码解释
复制
let darkenbutton = document.querySelector("#darken");
darkenbutton.addEventListener("click", resolutionChange(darken));
let classicbutton = document.querySelector("#classic");
classicbutton.addEventListener("click", resolutionChange(classic));
let colorsbutton = document.querySelector("#colors");
colorsbutton.addEventListener("click", resolutionChange(colors));

而不是像这样

代码语言:javascript
运行
AI代码解释
复制
let darkenbutton = document.querySelector("#darken");
darkenbutton.addEventListener("click", buttonchange.darkenmethod);
let classicbutton = document.querySelector("#classic");
classicbutton.addEventListener("click", buttonchange.classicmethod);
let colorsbutton = document.querySelector("#colors");
colorsbutton.addEventListener("click", buttonchange.colorsmethod);

其中按钮更改对象保存了3次重复的resolutionChange函数,只更改了前面提到的3种不同函数的行

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-05 15:16:56

您可以这样做,只需要以不同的方式调用该函数:

代码语言:javascript
运行
AI代码解释
复制
function resolutionChange(e, func) {
  const otherbuttons = document.querySelectorAll("button");
  otherbuttons.forEach((button) => {
    button.classList.remove("buttonclicked");
  });

  const button = e.target;
  button.classList.add("buttonclicked");

  let pixel = document.querySelectorAll(".pixel");
  pixel.forEach((pixel) => {
    pixel.remove();
  });

  let slider = document.querySelector(`#slider`);
  let res = slider.value;

  for (let i = 0; i < res * res; i++) {
    let pixel = document.createElement("div");
    pixel.classList.add("pixel");
    pixel.setAttribute(
      "style",
      `width: ${512 / res}px; height: ${512 / res}px;`
    );
    pixel.addEventListener("mouseover", func);
    mainholder.appendChild(pixel);
  }
}
const darkenbutton = document.querySelector("#darken");
darkenbutton.addEventListener("click", e => resolutionChange(e, darken));
const classicbutton = document.querySelector("#classic");
classicbutton.addEventListener("click", e => resolutionChange(e, classic));
const colorsbutton = document.querySelector("#colors");
colorsbutton.addEventListener("click", e => resolutionChange(e, colors));

或者,您可以使函数返回一个事件处理程序闭包:

代码语言:javascript
运行
AI代码解释
复制
function makeResolutionChanger(func) {
  return function clickHandler(e) {
    const otherbuttons = document.querySelectorAll("button");
    otherbuttons.forEach((button) => {
      button.classList.remove("buttonclicked");
    });
  
    const button = e.target;
    button.classList.add("buttonclicked");
  
    let pixel = document.querySelectorAll(".pixel");
    pixel.forEach((pixel) => {
      pixel.remove();
    });
  
    let slider = document.querySelector(`#slider`);
    let res = slider.value;

    for (let i = 0; i < res * res; i++) {
      let pixel = document.createElement("div");
      pixel.classList.add("pixel");
      pixel.setAttribute(
        "style",
        `width: ${512 / res}px; height: ${512 / res}px;`
      );
      pixel.addEventListener("mouseover", func);
      mainholder.appendChild(pixel);
    }
  }
}
const darkenbutton = document.querySelector("#darken");
darkenbutton.addEventListener("click", makeResolutionChanger(darken));
const classicbutton = document.querySelector("#classic");
classicbutton.addEventListener("click", makeResolutionChanger(classic));
const colorsbutton = document.querySelector("#colors");
colorsbutton.addEventListener("click", makeResolutionChanger(colors));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73253165

复制
相关文章
如何在JavaScript中使用高阶函数
原文链接:https://www.sitepoint.com/higher-order-functions-javascript/[1]
chuckQu
2022/09/20
1.6K0
如何在 TypeScript 中使用函数
英文 | https://www.digitalocean.com/community/tutorials/how-to-use-functions-in-typescript
winty
2022/04/08
15.3K0
如何在 TypeScript 中使用函数
JavaScript 函数定义的几种不同方式
在这篇中我们主要将函数的概念和函数声明的几种方式,牵扯到的还有函数中的形参和实参传参的问题,除此之外我们还会说一说 最常用 return 的作用,以及函数中处理参数的 arguments 等。
程序狗
2021/12/07
8080
JavaScript 函数定义的几种不同方式
Javascript中使用Lodash工具库的cloneDeep函数实现深拷贝
最近在看Vue_shop实战项目-电商管理系统(Element-UI)的B站视频,看到 P172 08.商品添加-把goods_cat从数组转换为字符串时,讲到了Lodash这个工具库的cloneDeep方法的使用。 Lodash是一个一致性、模块化、高性能的 JavaScript 实用工具库,其官网地址为:https://www.lodashjs.com/,Github托管地址为:https://github.com/lodash/lodash
ccf19881030
2020/04/14
4.3K0
为什么我坚持使用 JavaScript 函数声明
时光溯回到上世纪 90 年代晚期,在初次接触 JavaScript 时,老师教我们使用函数声明写下Hello World,它看上去是这样的······ function helloWorld() { return ‘Hello World!’; } 那时候,再没有比写出如下Hello World函数更酷的事儿了······ const helloWorld = () => 'Hello World!'; 这个函数表达式体现了 ES 2015 的最大亮点——箭头函数(Arrow function),精简
CSDN技术头条
2018/02/12
1.2K0
为什么我坚持使用 JavaScript 函数声明
PaLM中使用的激活函数:SwiGLU
我们不难发现,激活函数就是对x乘以一些数,以对某些值进行约束。 GLU(Gated Linear Unit),其一般形式为:
西西嘛呦
2023/02/16
4.8K0
PaLM中使用的激活函数:SwiGLU
浅谈javascript中的回调函数javascript中的函数匿名函数回调函数回调函数的使用回调函数实例总结
要理解javascript中的回调函数,首先我们就要对javascript中的函数有一定的理解,所以我们先从javascript中函数谈起,讲讲它与其他语言中的函数有什么不同。
desperate633
2018/08/22
3K0
浅谈javascript中的回调函数javascript中的函数匿名函数回调函数回调函数的使用回调函数实例总结
【说站】javascript递归函数如何使用
1、所有递归函数都有一个通用模式 。总是由一个调用自身的递归部分和一个不调用自身的基本情形组成。
很酷的站长
2022/11/23
1.6K0
在模板中使用函数
系统自带的函数,一般在functions.php中 // C函数,获取配置名称 <title>{:C('WEB_SITE_TITLE')}</title> // U函数,获取URL地址 <a class="brand" href="{:U('index/index')}">OneThink</a>
PM吃瓜
2019/08/12
1.3K0
在模板中使用函数
如何让别人看懂你的函数
这里的冒号和箭头是什么东西了,当时是很奇怪这里的写法,后面在网上查阅资料时,说是type hints,也就是类型提示。
罗罗攀
2021/03/23
6820
如何让别人看懂你的函数
JavaScript 学习-8.JavaScript 箭头函数的使用
前言 ES6 中引入了箭头函数() =>。箭头函数不需要使用function关键字,允许我们编写更短的函数. 箭头函数 之前使用function 定义函数 fun1 = function() { return "Hello World!"; } console.log(fun1()); // Hello World! 使用箭头函数() =>格式 fun2 = () => { return "Hello World!"; } console.log(fun2()); // Hello World! 只
上海-悠悠
2022/05/18
6020
JavaScript 数组排序函数sort()的使用
  sort()方法是js中对于数组进行排序的函数。其可以方便快捷的实现对于数组的排序而不用我们自己编写排序方法。注:sort()函数会直接改变原数组。
全栈程序员站长
2022/08/31
2.5K0
JavaScript立即执行函数(IIFE)的使用
js的立即执行函数(IIFE)有两种写法,分别为:(function ( ){})( ) 与 (function ( ){}( )) ,这两种写法基本上是没有区别的。
OECOM
2020/07/01
2.5K0
函数入参使用指针和引用的区别
赋值的来源为已定义的结构体:TreeSet treeSet = {0}中的trSet->tNameSet[i].tName地址(其中i为变量。
charlieroro
2020/03/24
7820
【说站】javascript中bind函数如何使用
2、当目标函数被调用时this值绑定到bind()的第一个参数,该参数不能被重写。
很酷的站长
2022/11/24
1.2K0
【说站】javascript中bind函数如何使用
10 - JavaScript 中的函数 & 11 - JavaScript 中函数的种类
原文地址:https://dev.to/bhagatparwinder/functions-in-javascript-5ehm
前端黑板报
2022/12/01
3.1K0
【说站】javascript如何使用构造函数继承
以上就是javascript使用构造函数继承的方法,希望对大家有所帮助。更多Javascript学习指路:Javascript
很酷的站长
2022/11/23
1.2K0
JavaScript 函数的定义
JavaScript函数是指一个特定代码块,可能包含多条语句,可以通过名字来供其他语句调用以执行函数包含的代码语句。
WEBING
2019/02/26
1.2K0
JavaScript 函数的定义
用 await/async 正确链接 Javascript 中的多个函数[每日前端夜话0xAF]
在我完成 electrade【https://www.electrade.app/】 的工作之余,还帮助一个朋友的团队完成了他们的项目。最近,我们希望为这个项目构建一个 Craiglist 风格的匿名电子邮件中继,其中包含 “serverless” Google Firebase Function(与 AWS Lambda,Azure Function 等相同)。到目前为止,我发现用 .then() 回调处理异步操作更容易思考,但是我想在这里用 async/await,因为它读起来更清晰。我发现大多数关于链接多个函数的文章都没有用,因为他们倾向于发布从MSDN 复制粘贴的不完整的演示代码。在 async/await 上有一些难以调试的陷阱,因为我遇到了所有这些陷阱,所以我将在这里发布自己的完整代码并解释我的学习过程。
疯狂的技术宅
2019/08/23
6.7K0
JavaScript的构造函数
在Java语言中,我们使用构造函数是实例化对象的过程,在JavaScript语言中我们可以使用构造函数的方式创建对象,如:
伯爵
2019/10/09
1.1K0
JavaScript的构造函数

相似问题

如何让我的函数引用函数之外的变量集?

13

javascript何时引用在构造函数中使用的函数?

12

我需要在不同函数中使用可变引用的帮助

117

如何让我的JavaScript函数使用我的HTML输入?

20

在其他函数中使用函数的值

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档