为什么javascript函数括号无法访问外部?

时间:2015-04-27 12:55:47

标签: javascript ecmascript-5

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

2 个答案:

答案 0 :(得分:2)

当您将函数包装在括号中时,它会将它放在新范围内。

它也像返回值,这就是它可以被称为IIFE或立即调用函数表达式的原因。

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

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

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

答案 1 :(得分:-1)

要了解有关详情,请阅读IIFE - Immediately-invoked function expression

短版本 - 函数在其自己的作用域中运行,除非您将参数传递给它,如下所示:

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