【问题标题】:Re-invoking IIFE [duplicate]重新调用 IIFE [重复]
【发布时间】:2019-09-17 12:16:49
【问题描述】:

为什么那个代码块会抛出错误“Uncaught ReferenceError: setSize is not defined”

const canvas = document.querySelector("#draw");

(function setSize() {
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
})();

window.addEventListener("resize", () => {
    setSize();
})

【问题讨论】:

  • 为什么将它作为 IFFE?为什么不直接使用普通的函数声明语句? Afaik,函数表达式不绑定到自身外部的符号。
  • 你把东西放在 IFEE 中的全部原因是像 setSize() 这样的东西不起作用。

标签: javascript iife


【解决方案1】:

只需定义您的 setSize 函数并调用一次(它应该与您的 IFFE 具有相同的效果)。

const canvas = document.querySelector("#draw");

function setSize() {
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
}

setSize();

window.addEventListener("resize", () => {
    setSize();
})

【讨论】:

  • 我知道我可以做到,难道不能创建和调用一个函数并使其可用于重新调用吗?
  • @OzturkCanGokkaya — 只能通过不直观的黑客攻击。编写清晰的代码。当简洁变成代码高尔夫游戏时,它就不再是一种美德了。
  • 正如@Mark Meyer 所说,IFFE 的全部目的是“装箱”内容并使其对代码的其他部分不可用。
猜你喜欢
  • 1970-01-01
  • 2020-08-13
  • 2015-02-19
  • 1970-01-01
  • 2021-01-06
  • 2016-12-15
  • 2016-12-20
  • 2020-05-07
  • 2014-09-14
相关资源
最近更新 更多