Javascript 是我还是VisualStudio2010?

Javascript 是我还是VisualStudio2010?,javascript,jquery,visual-studio-2010,Javascript,Jquery,Visual Studio 2010,每当我为网站编写大型JavaScript库时,我都会使用以下模式 虽然在运行时一切看起来都很好,但在VisualStudio中总是有一场噩梦 在匿名函数表达式的最后一行,我总是得到错误 “预期的;” 关于最后一个右括号 }(窗口,jQuery)) 我已经通过jslint运行了代码,没有任何问题,但是我的intellisense总是中断,我无法格式化代码。我错过什么了吗 ; (function (window, $) { // Define a local copy of MyLibra

每当我为网站编写大型JavaScript库时,我都会使用以下模式

虽然在运行时一切看起来都很好,但在VisualStudio中总是有一场噩梦

在匿名函数表达式的最后一行,我总是得到错误

“预期的;”

关于最后一个右括号

}(窗口,jQuery))

我已经通过jslint运行了代码,没有任何问题,但是我的intellisense总是中断,我无法格式化代码。我错过什么了吗

; (function (window, $) {

    // Define a local copy of MyLibrary
    var MyLibrary = {},

    // Shortcuts.
    // A central reference to the root messages object
    $$messages,

    // A central reference to the root messages.messageType object
    $$messageType;

    MyLibrary = function () {
        // The MyLibrary object is actually just the init 
        // constructor 'enhanced'
        return new MyLibrary.fn.init();
    };

    MyLibrary.fn = MyLibrary.prototype = {
        init: function () {
            // Initialise the object shortcuts.
            $$messages = MyLibrary.fn.messages;
            $$messageType = MyLibrary.fn.messages.messageType;
        }
    };

    // Give the init function the MyLibrary prototype for later instantiation
    MyLibrary.fn.init.prototype = MyLibrary.fn;

    MyLibrary.fn.messages = {
        /// <summary>
        /// Provides means to provide feedback message to the client.
        /// </summary>
        messageType: {
            information: "information",
            error: "error",
            success: "success"
        }
    };

    MyLibrary.fn.tester = function () {
        alert($$messageType.success);
    };

    // Expose MyLibrary to the global object
    window.MyLibrary = window.$m = MyLibrary();

} (window, jQuery));

jQuery(document).ready(function () {
    $m.tester();
});
;(函数(窗口,$){
//定义MyLibrary的本地副本
var MyLibrary={},
//捷径。
//对根消息对象的中心引用
$$消息,
//对根messages.messageType对象的中心引用
$$messageType;
MyLibrary=函数(){
//MyLibrary对象实际上只是init
//构造函数“增强”
返回新的MyLibrary.fn.init();
};
MyLibrary.fn=MyLibrary.prototype={
init:函数(){
//初始化对象快捷方式。
$$messages=MyLibrary.fn.messages;
$$messageType=MyLibrary.fn.messages.messageType;
}
};
//为init函数提供MyLibrary原型,以便以后实例化
MyLibrary.fn.init.prototype=MyLibrary.fn;
MyLibrary.fn.messages={
/// 
///提供向客户提供反馈信息的方法。
/// 
消息类型:{
信息:“信息”,
错误:“错误”,
成功:“成功”
}
};
MyLibrary.fn.tester=函数(){
警报($$messageType.success);
};
//向全局对象公开MyLibrary
window.MyLibrary=window.$m=MyLibrary();
}(窗口,jQuery));
jQuery(文档).ready(函数(){
$m.tester();
});

这个
可能会导致错误。我不知道为什么它是在一开始可能会导致错误。但我不知道为什么它是在一开始

应该是

}(窗口,jQuery)

}(窗口,jQuery))

应该是



}(窗口,jQuery)

您是否看到
在语句的开头?
(函数(窗口,$){…}(窗口,jQuery))我认为它应该像
(函数(窗口,$){…})(窗口,jQuery)@Raynos:你说得对,它是首字母“;”它是用来保护自己不受任何其他脚本的闭包影响的,这些脚本没有以闭包结尾。把它写在答案里,我会记下你是正确答案。羞耻VS不够聪明,无法确定这一点@Cem:语法可以用两种形式,但是我的语法是crockford推荐的,因为它更清楚地说明了表达式的范围。不过谢谢。“减价”对你来说可能是件好事?@Sehe:Hehehe。。。英语的微妙之处,嗯?你看到了
在语句的开头?
(函数(窗口,$){…}(窗口,jQuery))我认为它应该像
(函数(窗口,$){…})(窗口,jQuery)@Raynos:你说得对,它是首字母“;”它是用来保护自己不受任何其他脚本的闭包影响的,这些脚本没有以闭包结尾。把它写在答案里,我会记下你是正确答案。羞耻VS不够聪明,无法确定这一点@Cem:语法可以用两种形式,但是我的语法是crockford推荐的,因为它更清楚地说明了表达式的范围。不过谢谢。“减价”对你来说可能是件好事?@Sehe:Hehehe。。。英语的精妙之处是吗?这是为了保护自己不受其他脚本的影响。。。这是为什么…@JamesSouth的解释我知道你的意思。我更喜欢“精英主义”的态度,如果你把我的脚本和有缺陷的代码连接起来,那就不是我的问题了。这是为了保护我自己不受其他脚本的影响。。。这是为什么…@JamesSouth的解释我知道你的意思。我更喜欢“精英主义”的态度,如果你把我的脚本和有缺陷的代码连接起来,那不是我的问题,实际上这是一个相当主观的问题。我使用它作为Crockford模块化模式的一部分。查看这篇关于闭包的文章,它给出了关于中途关闭的解释。两种方法都是正确的。对于它的价值,Crockford提出了第一个建议。我已经浏览了那篇文章和yuiblog上的模块化模式链接,也许我遗漏了一些东西,但我从来没有看到它说应该将自调用参数放在不必要的函数包装参数中。在这两篇文章中,我看到的每个实例都将自调用参数放在函数包装参数之后。显然,这两种方法都有效。但是函数包装参数存在的全部原因是为了表明它后面的参数是自调用的。因此,在包装parens的函数中放入自调用parens有点违背了目的,我的意思。@scott:是的,我错了,链接的文章描述了闭包模式,但只是在注释的下方提到了不同的括号模式。我完全知道你从哪里来,但我无法想象为什么Crockford会在没有正当理由的情况下指定它为需要注意的东西。@James-是的,我也不知道。我会告诉你,我看到Paul Irish使用了这个,这是我最喜欢的模式:
(函数($,窗口,文档,未定义){…})(jQuery,这个,文档)。他提到的真正酷的事情是,通过不传递未定义的值,默认情况下未定义的值将真正是未定义的。因此,在函数中使用undefined进行比较将得到所获得的结果。它可以防止有人将
undefined=null在您的代码之上,并抛出未定义的比较。不管怎样,我想我只是顺便提一下,这是