我今天看到了这样的事情
var Visualizer = (function() {
function Visualizer() {
//...
}
Visualizer.prototype.function1 = function () { /* ... */ }
//...
return Visualizer;
})();
var viz = new Visualizer();
Run Code Online (Sandbox Code Playgroud)
我不明白这一点与仅仅摆脱了生命包装.
遇到一些在表达式中使用IIFE而不仅仅是普通函数的代码.
var custom_type = (function() {
return $('#myDiv').attr('custom_type');
})();
Run Code Online (Sandbox Code Playgroud)
通常我会写这样的东西:
var custom_type = function() {
return $('#myDiv').attr('custom_type');
};
Run Code Online (Sandbox Code Playgroud)
IIFE的原因是什么?我唯一能想到的是,IIFE可能custom_type只在开始时分配变量一次,而第二次可能会在每次引用变量时继续检查更新的类型.
我见过IIFE写的:
(function() {
console.log("do cool stuff");
})();
Run Code Online (Sandbox Code Playgroud)
以及:
(function() {
console.log("do more cool stuff");
}());
Run Code Online (Sandbox Code Playgroud)
它们似乎在我使用它们的任何环境中都是一样的,尽管在某些情况下我被告知一种方式是正确的而另一种方式是错误的,反之亦然.有没有人有任何坚实的理由或逻辑,因为它是一个订单而不是另一个订单?在某些情况下,在函数体关闭之后但在调用括号之前或之后但在最后的右括号之前可能会有更多的事情发生?我主要在一个Angular模块闭包中使用它们,似乎无法找到任何真正的理由去某种方式,想知道是否有人有不同的经验.
我正在阅读Greg Franko关于'jQuery Best Practices'的博客文章.
在他的早期幻灯片中,他解释了典型/更好/最好的做事方式.
典型(链接)
$("document").ready(function() {
console.log('hello world');
});
Run Code Online (Sandbox Code Playgroud)
要么
$(function() {
console.log('hello world');
});
Run Code Online (Sandbox Code Playgroud)
更好(链接)
(function($, window, document) {
$(function() {
console.log('hello world');
});
}(window.jQuery, window, document));
Run Code Online (Sandbox Code Playgroud)
最好的(链接)
(function(yourcode) {
yourcode(window.jQuery, window, document);
}(function($, window, document) {
$(function() {
console.log('hello world');
});
}));
Run Code Online (Sandbox Code Playgroud)
所以我想我的问题是 - 第三个例子比第二个例子好吗?两者都是IIFE.我看到的唯一区别是#2将jQuery对象(+ window + document)传递到IIFE并运行代码然后#3传递jQuery对象(+ window + document)和 JavaScript代码传入IIFE.有什么好处?
在 useEffect 中使用 IIFE 是个好习惯还是我应该声明 async 函数然后调用它?
useEffect(() => {
(async () => {
const response = await fetch(
"https://jsonplaceholder.typicode.com/posts"
);
const json = await response.json();
setPosts(json);
})();
});
Run Code Online (Sandbox Code Playgroud) 我有以下代码,我知道这是一个IIFE.但是,我从来没有能够掌握(jQuery)和($)是什么.我知道这与将jQuery的引用传递给IIFE有关,但有人可以清楚地向我解释它们的用途吗?谢谢你的帮助和时间:-)
(function ($) {
//code
})(jQuery);
Run Code Online (Sandbox Code Playgroud) 在 Javascript 中,IIFE(立即调用函数表达式,尽管可能还有该缩写词的其他扩展)可以写为:
(function () {
var foo = 'bar'
console.log('hi!');
})();
Run Code Online (Sandbox Code Playgroud)
其中变量声明foo不会污染当前作用域。我如何在 Ruby 文件中执行相同的操作?
我想在受限范围内(带有闭包)创建一些临时变量,并使文件中的其他代码无法访问它们。
我已经开始阅读这本书了.第2章说,编写IIFE有不同的方法:
!function (){}()
~function (){}()
+function (){}()
-function (){}()
new function (){}
1,function (){}()
1&&function (){}()
var i=function (){}()
Run Code Online (Sandbox Code Playgroud)
作者说:
每个表现形式都有其独特的品质和优势 - 一些具有较少的字节,一些更安全的连接,每个有效和每个可执行文件.
我是JS的新手.我知道IIFE是什么,但这些IIFE形式究竟做了什么?
最近,当我试图在JavaScript中学习更多有关IIFE和模块的问题时,我想到了IIFE如何制作模块而不是立即调用该函数并不会使它成为一个模块.
任何人都可以与我分享这段代码之间的区别
var MODULE = (function () {
var my = {},
privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.moduleMethod = function () {
// ...
};
return my;
}());
Run Code Online (Sandbox Code Playgroud)
和这个函数不立即调用的代码..
var MODULE = function () {
var my = {},
privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.moduleMethod = function () {
// ...
};
return my;
};
Run Code Online (Sandbox Code Playgroud)
第二个代码块是否意味着Module只是一个自身返回对象的函数?
如果我像这样使用第二个变量
var ModuleObj = Module();
Run Code Online (Sandbox Code Playgroud)
这会像我在IIFE上分享的第一个代码块一样工作吗...有点困惑......
select我正在 Vanilla JS 中制作一个 Web 组件,它在后台使用隐藏,在前面使用divand ul>li。从 api 等获取数据变得有点复杂,所以我转向 Svelte 来简化它并使其更具可读性。
现在我已经尝试了 2 天将该组件导出为 IIFE。我只是似乎不知道怎么做。我可能错了,但我认为这是 Svelte 的主要功能之一 - 制作可以在任何地方使用的可重用组件。制作它是很容易的部分,但现在我想加载它并直接在浏览器中使用它(使用<script src=""></script>)。我想这应该很容易吧?
我使用 Svelte 3 (3.57.0) 和 Vite 4 (4.2.1),并且我尝试使用 SvelteKit 和框架npm create svelte创建一个库项目。npm init vitesvelte
我已经阅读了相当多的 Vite 和 Svelte 文档,但感觉不知所措,而且我似乎找不到有效的配置。
有谁知道如何在 Svelte 中将组件编译为 IIFE?
iife ×10
javascript ×10
jquery ×2
function ×1
idioms ×1
module ×1
react-hooks ×1
reactjs ×1
ruby ×1
svelte ×1
svelte-3 ×1
use-effect ×1