javascript对象文字和自动执行功能

时间:2011-07-11 03:03:58

标签: javascript

我正在研究Javascript中的对象文字和自执行函数。通过一些YUI代码,我遇到了一些自我执行的对象文字方法。我的问题是为什么下面的代码没有警告'Ohai Mark!';

var bar = {
    alert: function () {
        window.alert('Ohai Mark!');
    },
    init: (function () {
        bar.alert();
    }())
};

2 个答案:

答案 0 :(得分:8)

详细解释:

> var bar = {

在javascript中,首先处理声明,因此 bar 在执行开始之前作为变量存在。

>     alert: function () {
>         window.alert('Ohai Mark!');
>     },
>     init: (function () {
>         bar.alert();
>     }())
在评估右侧的表达式之后,

bar 将被赋值。在评估期间, bar 具有达到语句(整行)时的任何值。它目前是 undefined ,因此它还没有 alert 属性。

> };

答案 1 :(得分:3)

执行代码时,“bar”已定义,但尚未在定义init()方法的位置分配结果JSON对象(并且即将分配给 bar 对象)<强> [EDITED] 即可。正确定义了init的函数作用域,我会在那里声明函数,如下所示:

var bar = {
  init: (function () {
      var alert = function () {
        window.alert('Ohai Mark!');
      };

      alert(); //this will execute the code above
  }())
};

Javascript Garden#namespaces and scopes [编辑] 您可能会认为这类似于:

(function() {
  var c = c + 1;
})();