为什么javascript函数里面的括号不能访问外面?

Why javascript function parentheses can not access the outside?

我很好奇,为什么不只是 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

当您像以前那样将函数括在括号中时,它确实会把它放在一个新的范围内。

它也像一个 return 值,这就是为什么它可以称为 IIFE,即立即调用函数表达式。

另一种重写它的方法,这样更有意义:

var myFunc = (function test(){
  alert('Hello!');
});

myFunc(); // Works!
test();   // Doesn't work!

要了解更多信息,您应该阅读 IIFE - Immediately-invoked function expression

简短版本 - 函数在其自己的范围内运行,除非您将参数传递给它,如下所示:

(function test(x) {
   alert(x); //alerts "yey!";
})("yey!");