Javascript最佳实践,为什么要使用逗号来链接函数/变量声明?

fms*_*msf 6 javascript

我一直在为jQuery"jQueryLog"开发一个插件,以便调试链选择器和返回值.如果你想查看它,你可以在这里

这已经是第二个版本了.第一个版本实际上是一个编辑过的jQuery,在做这个时我不得不阅读jQuery来了解内部的工作原理.问题来自那里:

var jQuery = function( selector, context ) {
        // The jQuery object is actually just the init constructor 'enhanced'
        return new jQuery.fn.init( selector, context, rootjQuery );
    },

    // Map over jQuery in case of overwrite
    _jQuery = window.jQuery,

    // Map over the $ in case of overwrite
    _$ = window.$,

    // A central reference to the root jQuery(document)
    rootjQuery,

    // A simple way to check for HTML strings or ID strings
    // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
    quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
    (...)
Run Code Online (Sandbox Code Playgroud)

使用声明链+"逗号"而不仅仅是使用以下是否有任何重要原因:

function jQuery ( selector, context ) { ... }

var _jQuery = window.jQuery;
var _$ = window.$;
etc...
Run Code Online (Sandbox Code Playgroud)

我在这里看到的唯一原因是缩小器具有不能减少的文字.但还有其他原因吗?

par*_*ton 5

这只是将所有变量保留在函数范围内的一种较短方法,同时确保它们在定义之前不被使用.

JavaScript Patterns(2010年9月,O'Reilly)中,Stoyan Stefanov将其称为单一var模式:

JavaScript允许您在函数中的任何位置具有多个var语句,并且它们都像在函数顶部声明变量一样.此行为称为提升....您使用一个var语句并声明由逗号分隔的多个变量.在声明变量时使用初始值初始化变量也是一种很好的做法.这可以防止逻辑错误(所有未初始化和声明的变量都使用该值初始化 undefined),并且还可以提高代码可读性.