【问题标题】:Why javascript function parentheses can not access the outside? [duplicate]为什么javascript函数括号不能访问外面? [复制]
【发布时间】:2015-04-27 21:04:02
【问题描述】:

我很好奇,为什么不只是javascript函数作用域呢?为什么只是加了括号就不能访问呢?我的猜测是括号和javascript相关的操作,但是不知道到底为什么这个child原理和设计?

(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

【问题讨论】:

  • 这就是立即调用函数表达式的工作方式,它只能在它自己的范围内使用。
  • IE8 在 console.log 上会失败,因为 IE8 不支持。
  • 重复列表中的第一个链接具有误导性。这与闭包无关。有关函数表达式,请参见第二个链接。

标签: javascript ecmascript-5


【解决方案1】:

当您像以前那样将函数包装在括号中时,它确实将其放入了新的作用域中。

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

另一种重新编写它的方式,这样会更有意义:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 投反对票的原因?
    猜你喜欢
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    相关资源
    最近更新 更多