Javascript 为什么jQuery源代码定义函数';两次';例如;var someFunction=function someFunction();?

Javascript 为什么jQuery源代码定义函数';两次';例如;var someFunction=function someFunction();?,javascript,jquery,function,syntax,Javascript,Jquery,Function,Syntax,我对JavaScript比较陌生,我在读jQuery源代码时做了一些开源学习。例如,我注意到有些函数(并非所有函数)定义为“循环” var isWindow = function isWindow( obj ) { return obj != null && obj === obj.window; }; 我的想法: 我知道代码的作用。它检查一个对象是否是一个窗口对象,因为它有一个特殊的属性,即它的字段。窗口指向它自己:窗口===窗口。窗口===窗口。窗口

我对JavaScript比较陌生,我在读jQuery源代码时做了一些开源学习。例如,我注意到有些函数(并非所有函数)定义为“循环”

var isWindow = function isWindow( obj ) {
        return obj != null && obj === obj.window;
    };
我的想法:

  • 我知道代码的作用。它检查一个对象是否是一个窗口对象,因为它有一个特殊的属性,即它的字段。窗口指向它自己:窗口===窗口。窗口===窗口。窗口==窗口。窗口

  • 这可能与吊装有关吗?如果是这样的话,为什么一开始就不定义isWindow函数会更好呢?一旦到达声明,为什么不使用匿名函数呢


  • 谢谢

    一旦到达声明,为什么不使用匿名函数呢?IIRC,总是使用命名函数来帮助调试,但最近的Javascript引擎不再是这种情况。它们没有被定义两次,也与提升无关
    var isWindow
    定义了一个名为“isWindow”的变量<代码>=函数isWindow()然后为其指定一个命名函数表达式。这是否回答了您的问题?也许目的是为了避免托管(或者可能只是他们使用的一个linting规则)@emrhzc命名函数有助于调试,因为stacktrace将使用这些名称而不是很多(匿名)。一旦到达声明,为什么不使用匿名函数呢?IIRC,总是使用命名函数来帮助调试,但最近的Javascript引擎不再是这种情况。它们没有被定义两次,也与提升无关
    var isWindow
    定义了一个名为“isWindow”的变量<代码>=函数isWindow()然后为其指定一个命名函数表达式。这是否回答了您的问题?也许这样做的目的是为了避免托管(或者可能只是他们使用的一个linting规则)@emrhzc命名函数有助于调试,因为stacktrace将使用这些名称而不是很多(匿名)。