javascript - 在 IIFE block 中定义一个变量

标签 javascript iife

谁能解释以下两个 IIFE block 之间的区别:

a) (f1 = function(){console.log('IIFE Block1')})()
b) (var f1 = function(){console.log('IIFE Block2')})()

我知道“b)”在执行时会抛出错误。 定义变量“f1”有什么用,它的属性是什么。

最佳答案

a 仅在严格模式之外有效。 f1 被隐式定义为全局变量并设置为您的 IIFE 的值。如果您在严格模式下尝试此操作,则会抛出错误,因为 f1 尚未使用 varlet 显式声明const,或作为函数参数:

function quirks() {
  (f1 = function() { return 'f1 IIFE'; })();
  return f1;
}
console.log(quirks());

function strict() {
  "use strict";
  
  (f2 = function() { return 'f2 IIFE'; })();
  return f2;
}
console.log(strict());

关于javascript - 在 IIFE block 中定义一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49165941/

相关文章:

javascript - 异步箭头函数和异步 IIFE 有什么区别?

javascript - "var x = function function_name(){}"是什么意思?

javascript - 拆分一个值的字符串数组失败

Javascript id 作为 href 中的参数

javascript - javascript中的正则表达式不允许字段中只有空格但允许带有空格的字符串并且还允许空字段

javascript - 数组作为队列并在另一个内部调用函数

javascript - XPages:配置文件切换

javascript - 在 JavaScript 中,!function(){}() 相对于 (function () {})() 的优势是什么?

polymorphism - 为什么在 iife 中包装函数会导致弱类型?

javascript - 箭头函数(它是一个参数)如何接受 x 的值作为 1 并返回它?