Selfexectued功能不起作用

时间:2014-08-28 19:01:54

标签: javascript

为什么这不起作用?

function init() {
    // var x = ...
    // some more code ..
}();

抛出:SyntaxError: Unexpected token )

为什么这样可以正常工作?

function init() {
    // var x = ...
    // some more code ..
}(init)();

我只想要一个函数,里面有自己声明的变量,但我不想再让这个函数可以访问了。最后一个做我说的,但为什么这样做?我也不知道我是如何找到解决方案的。

3 个答案:

答案 0 :(得分:2)

很确定它是这样的:

(function init() {
   console.log(3)
})();

如果用函数代码

替换init,那么第二个示例与此相同

答案 1 :(得分:1)

  

为什么这不起作用?

您尝试立即调用函数声明function作为语句)而不是函数表达式function as一个运营商)。你需要做一些事情让解释者把它作为一个表达来阅读。


  

为什么这样可以正常工作?

空白在 JavaScript 中意义不大,所以

function foo() {
}(foo)();

相同
function foo() {
}
(foo)();

相同
function foo() {
}
foo();

即。你只是像普通的声明函数一样调用它


编写名为IIFE 的最佳做法是

(function foo() {
    // foo's body
}());

对于匿名IIFE ,只需删除名称并保持其余部分

答案 2 :(得分:1)

function init(){}

返回undefined

(function init(){})

返回一个函数。

由于函数定义不返回函数,因此您无法通过在末尾添加parens ()来调用函数。要定义和调用函数,您应该使用此模式:

(function init(){})();

如果您不需要再次致电init,请使用匿名功能:

(function(){})();