谁能解释以下两个 IIFE block 之间的区别:
a) (f1 = function(){console.log('IIFE Block1')})()
b) (var f1 = function(){console.log('IIFE Block2')})()
我知道“b)”在执行时会抛出错误。 定义变量“f1”有什么用,它的属性是什么。
最佳答案
a
仅在严格模式之外有效。 f1
被隐式定义为全局变量并设置为您的 IIFE 的值。如果您在严格模式下尝试此操作,则会抛出错误,因为 f1
尚未使用 var
、let
、 显式声明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/