我正在研究Javascript中的对象文字和自执行函数。通过一些YUI代码,我遇到了一些自我执行的对象文字方法。我的问题是为什么下面的代码没有警告'Ohai Mark!';
var bar = {
alert: function () {
window.alert('Ohai Mark!');
},
init: (function () {
bar.alert();
}())
};
答案 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;
})();