我很好奇,为什么不直接使用javascript函数的作用呢?为什么只加一个括号就无法访问呢?我的猜测是括号和javascript相关的操作,但不知道为什么这个子原则和设计呢?
(function test(){
console.log( test );
})();
test();//Uncaught ReferenceError: test is not defined IE8- is ok
或
(function test(){
console.log( test );
});
test();//Uncaught ReferenceError: test is not defined IE8- is ok
当你像以前一样将函数包装在括号中时,它确实会把它放在一个新的作用域中。
它也像一个返回值,这就是为什么它可以被称为IIFE,或立即调用函数表达式。
另一种重写它的方法,会更有意义,如下所示:
var myFunc = (function test(){
alert('Hello!');
});
myFunc(); // Works!
test(); // Doesn't work!
要了解更多信息,您应该阅读 IIFE - 立即调用的函数表达式。
简短版本 - 函数在其自己的范围内运行,除非您将参数传递给它,如下所示:
(function test(x) {
alert(x); //alerts "yey!";
})("yey!");