为什么javascript函数括号不能进入外面



我很好奇,为什么不直接使用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!"); 

最新更新