相关疑难解决方法(0)

javascript中的init函数及其工作原理

我经常看到以下代码:

(function () {
  // init part
})();
Run Code Online (Sandbox Code Playgroud)

但我永远无法理解它是如何运作的.我发现最后一个括号特别令人困惑.有人可以解释它在执行上下文(EC)和变量对象(VO)方面的工作原理吗?

javascript

55
推荐指数
5
解决办法
11万
查看次数

(function(){})()之间的区别; 和function(){}();

可能重复:
"(function(){})()"和"(function(){}())"在JavaScript中功能相同吗?

这是我还没有想到的东西,但是我一直在使用function(){}(),因为我添加了括号后我的VIM语法突出显示,虽然我已经看过(function(){}) ()很多次,也许它是一个IE的东西?

编辑:

var singleton = function() {
    // code
}();

var singleton = (function() {
    // code
})();
Run Code Online (Sandbox Code Playgroud)

javascript syntax

36
推荐指数
2
解决办法
2万
查看次数

(function(){...}())之间有区别吗?和(function(){...})();?

可能重复:
自动执行匿名JavaScript函数的括号位置?

有时我看到:

(function() { ... }()); 
Run Code Online (Sandbox Code Playgroud)

有时我看到:

(function() { ... })(); 
Run Code Online (Sandbox Code Playgroud)

我看到有和没有参数的两种形式.它们 执行匿名功能.

这两种形式有区别吗?是否有任何令人信服的理由使用一种形式而不是另一种形式?

javascript anonymous-function

22
推荐指数
2
解决办法
3877
查看次数

jQuery问题:这究竟是什么意思?

(function($, window, undefined){
  ... jquery code... 
})(jQuery, window);
Run Code Online (Sandbox Code Playgroud)

它到底意味着什么?这也意味着$(document).ready()什么?或者只是两件不同的事情?

javascript jquery

14
推荐指数
1
解决办法
2667
查看次数

这些自执行匿名函数(又名IIFE)实现之间有什么区别

在许多书籍/ 博客文章中,自调用匿名函数模式的方式如下:

(function() {
  var foo = 'bar';
})();
Run Code Online (Sandbox Code Playgroud)

但是,在此上运行JSLint会出现此错误:

将调用移动到包含该函数的parens中.

例如将其改为此作品:

(function() {
  var foo = 'bar';
}());
Run Code Online (Sandbox Code Playgroud)

问题

  1. 为什么第一个实现对JSLint来说不够好?有什么区别?
  2. 什么是首选形式?JSLint总是对的吗?
  3. 它为什么有效?毕竟function(){}()抛出一个SyntaxError: Unexpected token (
    但用parens包裹它会让它突然间起作用吗?eg (function(){}()) - 工作正常
    (毕竟这是JavaScript,而不是Lisp,所以包装parens对ohterwise语法错误的影响是什么?)

编辑:这是对此的一些后续(虽然我不会说完全重复):JSLint错误:"将调用移动到包含该函数的parens",所以我的主要问题是#3,为什么它完全有效?

javascript

9
推荐指数
1
解决办法
610
查看次数

这是什么?(function(){})()

可能重复:
此JavaScript代码段的含义是什么?
用于自动执行匿名JavaScript函数的括号的位置?

(function(){

    //something here...

})() <--//This part right here.
Run Code Online (Sandbox Code Playgroud)

究竟是什么)()
如果我改成它())怎么办?

(function(){

    //something here...

}()) <--//Like this
Run Code Online (Sandbox Code Playgroud)

javascript function

8
推荐指数
2
解决办法
1173
查看次数

我该如何申报自我调用功能?

我在Javascript中看到过这样的自调用函数:

(function () {
    // foo!
})();
Run Code Online (Sandbox Code Playgroud)

但我也看到他们这样写:

(function () {
    // bar!
}());
Run Code Online (Sandbox Code Playgroud)

从语法上讲,它们完全相同.实际上,我的个人习惯是第一种格式,但是我应该注意两者之间有什么区别吗?像浏览器纠结或其他什么?

例如,一个非常微不足道的事情是,如果第二种格式应该可靠地工作,那么这意味着这样的事情也应该是可能的:

function () {
    // shut the front door! saved two characters right there!
}();
Run Code Online (Sandbox Code Playgroud)

尽管如此,这会伤害可读性.

javascript anonymous-function

8
推荐指数
1
解决办法
747
查看次数

在ES6中使用IIFE命名?

显然,ES6不需要命名空间,因为每个文件都是一个单独的模块.

但是,如何避免全局命名空间干扰?

例如,巴贝尔编译我scripts/main.js仅仅通过替换文件constvar.

var alert = 'This line doesn\'t do anything.'
window.alert(alert)
Run Code Online (Sandbox Code Playgroud)

ANS使用IIFE的命名空间(如下所示)可防止名称冲突:

const ANS = (function () {
  const alert = 'This works'
  window.alert(alert + '.')
  return {alert: alert + ' too.'}
})()
alert(ANS.alert)
Run Code Online (Sandbox Code Playgroud)

向命名空间添加属性ANS比将它们添加到全局命名空间更简洁window,或this.而且,IIFE提供了进一步的封装.

那么,不是第二种方式,即用IIFE创建自定义命名空间,比第一种更好吗?如果是这样,在ES2015中有更新/更好的方法吗?Babel为什么不为我这样做?

namespaces global-variables iife ecmascript-6 babeljs

8
推荐指数
2
解决办法
4102
查看次数

在最终括号之前或之后将函数调用放在自执行javascript函数之间是否有任何区别

可能重复:
自动执行匿名JavaScript函数的括号位置?

答案可能很简单,但我只是好奇.

我已经看到自编写的函数

(function() {
//...
}());
Run Code Online (Sandbox Code Playgroud)

(function() {
//...
})();
Run Code Online (Sandbox Code Playgroud)

包含函数的括号在调用之前关闭的位置.两者似乎都具有完全相同的效果,所以我只是想知道性能是否会有任何差异?

javascript anonymous-function

5
推荐指数
0
解决办法
96
查看次数

内部括号与外部括号之间的区别

有人可以解释这些闭包之间的区别吗?有区别吗?我以前没见过第二个例子(里面的括号).

(function(a, b) {
    //...
})(x, y);

// Parentheses inside
(function(a, b) {
    //...
}(x, y));
Run Code Online (Sandbox Code Playgroud)

在这里,这些闭包之间有区别吗?是否有一个地方有一个场景出现差异?

FOO.Bar = (function() {
    //...
})();

FOO.Bar = (function() {
    //...
}());
Run Code Online (Sandbox Code Playgroud)

javascript closures

5
推荐指数
1
解决办法
948
查看次数