(heading level 1)
IIFE和JavaScript中的 (function() { } )() 构造是什么?
(p) 我想了解这个的含义:
1(function () {
2
3})();
(p) 这是否基本上等同于 document.onload
?
这是一个Immediately-Invoked Function Expression (IIFE)。它在创建后立即执行。
这与任何事件处理程序(如 document.onload
)无关。
考虑括号内的部分:(<b>function(){}</b>)();
....它是一个常规的函数表达式。然后看最后一对括号 (function(){})<b>()</b>;
,这通常用于在表达式中调用一个函数;在这种情况下,我们先前的表达式。
这种模式通常用于避免污染全局命名空间,因为 IIFE 中使用的所有变量(如任何其他常规函数中的变量)在其作用域外不可见。
这可能是为什么你将此结构与 window.onload
的事件处理程序混淆,因为通常用于此:
1(function(){
2 // 你的所有代码在这里
3 var foo = function() {};
4 window.onload = foo;
5 // ...
6})();
7// 这里 foo 是不可访问的(undefined)
(Guffa 提出的更正:)
函数在创建后立即执行,而不是解析后执行。在执行其中的代码之前,会先解析整个脚本块。此外,解析代码并不意味着它会被执行,例如,如果 IIFE 处于函数内部,则在调用函数之前不会执行。
(更新) 由于这是一个非常流行的主题,值得提到的是 IIFE 也可以使用 ES6 的箭头函数来编写(如 Gajus 在评论中指出的):
1((foo) => {
2 // 在这里使用 foo
3})('foo value')
这是一个假设与你的问答原始文本一一对应的陈述性教程。
以下是摘要、内容和总结部分。注意,陈述性教程的输出格式是 Markdown 格式。
IIFE和JavaScript中的 (function() { } )() 构造
IIFE(Immediately-Invoked Function Expression)是一种在创建后立即执行的JavaScript函数。它与任何事件处理程序无关,而是用于特定的编码模式和功能。
一个IIFE的基本语法是 (function() { code })();
。在这个例子中, (function() { code })
是一个函数表达式,()
是调用这个函数的括号。
一个典型的用途是避免在全局命名空间中污染变量。在IIFE中声明的所有变量仅在其作用域内可见,并且不会与外部代码产生冲突。
以下是一个使用IIFE的示例:
1(function () {
2 var foo = 'bar';
3 console.log(foo); // 输出: bar
4})();
5console.log(foo); // 输出: ReferenceError: foo is not defined
在这个示例中,foo
是在IIFE的作用域内定义的变量,它的作用域不会超出IIFE本身。因此,外部的 console.log(foo)
语句将会报错。
IIFE还具有封装代码的作用,使其在外部无法访问。这样可以保护代码不被外部修改或破坏。只有通过将特定的变量或函数返回给外部,才能让外部代码访问到IIFE中的内容。
总结:
通过IIFE,你可以创建一个在创建后立即执行的函数,避免全局命名空间的污染,并保护代码不被外部访问和修改。这是一种常见的JavaScript编码模式,特别是在需要保护和隔离代码的场景下。
相关文章推荐
- Random Color Generator
- <html>
- 获取触发事件的元素的ID
- JavaScript中从URL中获取协议、域名和端口
- 在 JavaScript 中如何使用命名参数
- 在JavaScript中如何检查对象是否具有特定属性?
- 使用jQuery动态创建隐藏的表单元素
- 在Javascript中获取自Unix纪元以来的毫秒数
- 使用原生JavaScript选择具有"data-xxx"属性的所有元素(无需使用jQuery)
- 如何检查一个对象是否为日期对象?
- 在JavaScript中创建静态变量
- 使用JavaScript源映射(.map文件)
- 使用jQuery即时检测<input type="text">的所有更改
- <html>
- 在JavaScript中将数字转换为字符串的最佳方式
- 在JavaScript中执行整数除法和取余操作
- 如何获取当前日期和时间的秒数
- 在 JavaScript 中给今天的日期添加指定天数
- 将逗号分隔的字符串转换为数组的方法
- <!DOCTYPE html>
- +# 用JS解析HTML字符串
- 在Google Chrome中如何通过代码设置JavaScript断点
- 使用jQuery实现自动滚动到页面底部
- PHP中的shell_exec()和exec()命令的区别
- 在JavaScript中如何编写行内的IF语句
- "正确"的JSON日期格式是什么?
- 在JavaScript中给Date对象添加小时的方法
- 如何克隆一个 Date 对象?
- 使用 Fetch API 进行 GET 请求设置查询字符串
- 如何从JavaScript对象中删除项
- 阻止双击后文本选择的方法