在 Udacity 课程中,它提到了关于模块模式的相互矛盾的事情:
模块模式需要使用 IIFE
和
模块模式的核心是利用范围、闭包和(通常)IIFE。
那么,如果我理解正确的话,模块模式需要使用闭包,但是闭包是否需要位于 IIFE 中?
我在文件中有以下 IIFE iife.js:
(function() {
return "Hello World!";
}());
Run Code Online (Sandbox Code Playgroud)
我想在另一个文件中得到这个函数的结果:
var result = require("./iife");
console.log(result);
Run Code Online (Sandbox Code Playgroud)
但result是{}而不是Hello World!。
如何从另一个文件访问 IIFE 的返回值,最好不要更改中的代码iife.js?
此 IIFE 代码能够访问计数
let count = 0;
(function immediate() {
if (count === 0) {
let count = 1;
console.log(count);
}
console.log(count);
})();
Run Code Online (Sandbox Code Playgroud)
但为什么在这种情况下count是未定义的呢?
var count = 0;
(function immediate() {
if (count === 0) {
var count = 1;
console.log(count);
}
console.log(count);
})();
Run Code Online (Sandbox Code Playgroud) 我正在使用javascript制作图像滑块插件!是的...我很无聊
,我希望它立即开始,所以我试图像jQuery源代码中那样立即调用函数表达式(IIFE):
(function blahBlahBlah(someJquery, thing, lalala, jquery){
//You could have no parameters if you'd wanted but for the sake of this question I just added some gibberish...
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
我试图制作一个像这样的立即调用函数表达式(IIFE)并失败了::),这就是我尝试过的方法:
(function blahBlahBlah(someNames, someThing, lalala, Me){
})(MyName);
Run Code Online (Sandbox Code Playgroud)
并失败,但是当我用window替换最后一个参数时它可以工作吗?
我什至尝试了像这样的左侧变量:
(function blahBlahBlah(someNames, someThing, lalala, Me){
MyName = window;
})(MyName);
Run Code Online (Sandbox Code Playgroud)
为什么要这样做以及如何获得想要的效果?在此先感谢,-Millzie。
我在这里嘲笑了一些代码
var common = common || {};
(function(NAMESPACE) {
NAMESPACE = {
isIE: function() {
return true;
}
};
main();
})(common);
function main() {
console.log(common.isIE());
return 'Hello, World!';
}
Run Code Online (Sandbox Code Playgroud)
我想了解一些事情,
1)为什么这不起作用,我想这与确定范围如何"决定"和IIFE有关,但并不完全确定.
2)如何使这个代码工作?
我在我正在构建的网页中有3个不同的脚本,一切正常.
但是,在我了解了IIFE的优点之后,我试图将我的所有脚本包装在一个IIFE中,但它无法正常工作.控制台上出现错误:'Uncaught SyntaxError:意外的输入结束'refeering script-1.js.
所以,我有类似的东西:
<script type='text/javascript' src='...script-1.js'></script>
<script type='text/javascript' src='..script-2.js'></script>
<script type='text/javascript' src='script-3.js'></script>
Run Code Online (Sandbox Code Playgroud)
我正在做的是:在script-1.js上我启动了这样的代码
(function() {
//....rest of javaScript code script-1
Run Code Online (Sandbox Code Playgroud)
在script-3.js上,我结束了这样的代码:
//....rest of the code script-3
})();
Run Code Online (Sandbox Code Playgroud)
1)现在,第一个问题是:这可能吗?在同一个IIFE中包装不同的js文件?理论上似乎是,但我不确定.
2)然后,如果有可能,我做错了什么?
我知道对你们大多数人来说这似乎很基本但我会很感激一些反馈:)
有人能解释我出去,如果下面的代码片段代表匿名函数或不?
var alpha = (function(){
/*
private space
*/
return{
//Some Code Here ...
}
})();
Run Code Online (Sandbox Code Playgroud)
这是匿名函数吗?这对我来说看起来像是匿名函数的结构,但我读到匿名函数是一个没有名字的函数。在这里,我认为 alpha(variable) 是分配给函数的名称,因此与概念相矛盾。
我知道它是否会是:
(function(){
return{
//Some Code Here ...
}
})();
Run Code Online (Sandbox Code Playgroud)
那么这将是Anonymous Function (self invoking) 或IIFE。
此外,以下是一个简单的函数,但不是匿名函数,因为 beta 被分配给该函数(如我上面的示例)。所以,如果这不是匿名函数(因为 beta 指向函数并代表它),那么我之前的函数(alpha 指向函数)怎么可能是匿名的?此外,自调用是额外的部分。我相信,仅仅因为一个函数是自调用的并不能使它成为匿名的。
var beta = function(){
//Some code
}
Run Code Online (Sandbox Code Playgroud)
有人可以澄清我吗?
最近被问到以下JavaScript代码会导致什么,正确的答案让我困惑:
(function () {
var a = b = 5;
})();
console.log(b);
Run Code Online (Sandbox Code Playgroud)
我原本以为这会打印undefined但实际打印5.
根据我的理解,IIFE(立即调用的函数表达式)中定义的所有变量在其范围之外不应该是可见的.这些变量声明的排序b在其范围之外a是如何显示的,而在其范围之外是不可见的?
const renderTask = (task) => {
if (task) {
const li = `<div class="li"><span><input type="checkbox">${task.description}</span><svg height="15" width="15" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 5v.01M12 12v.01M12 19v.01M12 6a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2z" />
</svg></div>`;
ul.innerHTML += li;
}
};
renderTask();
export { renderTask as default };
Run Code Online (Sandbox Code Playgroud)
上面的代码运行得很好,但是当我将其重构为下面的代码时,我收到一个 eslint 错误,指出Parsing error: …
如果(function foo(){})是一个表达式,由于'context'为"(括号)"是一个分组运算符,分组运算符只能包含一个表达式.
这导致了这个问题,您能否在IIFE中声明一个函数,或者它仍然算作一个函数表达式?
javascript function function-declaration function-expression iife
我有一个返回对象的IIFE.在我的app.js文件中,我将其添加到index.html中的脚本标记中,我登录到我的IIFE的控制台类型,它是一个对象.它不应该是一个功能吗?为什么typeof返回一个对象?
这是app.js中的IIFE:
var UIController = (function() {
var DOMstrings = {
inputType: '.add__type',
description: '.add__description',
value: '.add__value',
addBtn: '.add__btn'
};
return {
getInput: function() {
// return an object containing all values from UI elements
return {
type: document.querySelector(DOMstrings.inputType).value, // will be either income or expense
description: document.querySelector(DOMstrings.description).value, // description of transaction
value: document.querySelector(DOMstrings.value).value // value of transaction
};
},
getDOMStrings: function() {
return DOMstrings;
}
};
})();
console.log(typeof UIController);
Run Code Online (Sandbox Code Playgroud)