我一直在努力学习关闭,但有一件事仍困扰着我.如果我有以下代码:
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
add();
add();
add();
// Returns "3"
Run Code Online (Sandbox Code Playgroud)
如果我调用add()三次,为什么不每次都将counter设置为零,然后返回一个递增计数器的匿名函数?一旦自动调用函数运行,它是否会跳过它?对不起,如果问题看起来很简单,我很难理解它.任何帮助将不胜感激.
这段代码有什么问题?
function test() {
(function(){
console.log('1')
})()
(function(){
console.log('2')
})()
}
test()
Run Code Online (Sandbox Code Playgroud)
我有一个这样的自调用函数:
var f = (function f(){ return "123"; },
function g(){ return 2; },
function h(){ return "test"; })();
typeof f;
Run Code Online (Sandbox Code Playgroud)
typeof f始终是最后一个函数定义中返回的类型.就像h是最后一样,那就是"string",但如果我删除h并拥有g最后一个,那么"number".
有人能解释为什么吗?
可能重复:
感叹号在功能之前做了什么?
我正在查看Twitter Bootstrap JavaScript代码,我注意到他们所有的插件都包含在否定自我调用函数中.
我知道function ($) { ... }(window.jQuery);立即调用该函数.
但是!为了什么?
javascript jquery negate twitter-bootstrap self-invoking-function
我目前正在读完JavaScript.我在http://www.w3schools.com/js/js_function_closures.asp上关于JavaScript中的闭包(允许"私有变量")的章节.
这个例子是一个计数器:
<!DOCTYPE html>
<html>
<body>
<p>Counting with a local variable.</p>
<button type="button" onclick="myFunction()">Count!</button>
<p id="demo">0</p>
<script>
var add = (function () {
var counter = 0;
return function () {return counter += 1}
})()
function myFunction(){
document.getElementById("demo").innerHTML = add();
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
它声明它使用自调用函数将计数器设置为0 一次,并在每次迭代add()时递增计数器.但是,我在代码中看到,用于自调用函数的花括号围绕着counter = 0和增加计数器的函数.我很难想象两个命令在自调用函数中的确切程度,但只运行一次,而另一个运行每次迭代.
我正在使用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。
在下面的代码中
(function x() {
var j = function() { alert("234234"); }
return {
s: j
}
})()
var x1 = new x();
x1.s();
Run Code Online (Sandbox Code Playgroud)
如何调用方法j()?或者之前我应该问,是否有办法创建函数x()的实例,因为这就是发生的事情.请看小提琴http://jsfiddle.net/e5k6bdvn/
我无法使事件侦听器自调用和侦听器工作的功能。
以下代码执行该函数,但事件侦听器不起作用:
window.addEventListener("resize", (function () {
document.getElementById("divMenu").innerHTML = document.getElementById("divTop").offsetWidth
})())
Run Code Online (Sandbox Code Playgroud)
该函数将设置网站格式所必需的(从一开始就是动态的)CSS 样式。“调整大小”功能必须在加载时执行。是否可以做到这一点,还是应该创建一个单独的自调用函数并在事件侦听器上调用它?