3

重複の可能性:
JavaScript: var functionName = function() {} vs function functionName() {}

var特にクロージャーを扱う場合、通常の関数定義だけでなく s を使用して関数を宣言する理由はありますか?

明らかに、これは私が実演するまであまり意味をなさないでしょう。

注: この点を明確にするために、require.js を使用しています。

例 A: 普段のやり方

define(function() {

    function foo(x) {
        return x + 42;
    }

    function bar(y) {
        return y + foo(y);
    }

    var MyObject = function(config) {
        // some sweet stuff
    }

    MyObject.prototype = {
        myFun: function(x) {
            return bar(x)
        }
    }

    return MyObject;
})

例 B: 私の見方

define(function() {

    var foo = function(x) {
        return x + 42;
    }

    var bar = function(y) {
        return y + foo(y);
    }

    var MyObject = function(config) {
        // some sweet stuff
    }

    MyObject.prototype = {
        myFun: function(x) {
            return bar(x)
        }
    }

    return MyObject;
})

たぶん、2つの間に何らかの違いがあるに違いないと思います... :)

お時間とご尽力いただきありがとうございます。


編集:より賢明な方法で質問しようとしました!

4

1 に答える 1

0

本当に得はありません。例 A の関数宣言は関数式に変更され、クロージャの先頭に引き上げられるため、var例 B の宣言が引き上げられると、最初の例で定義したものと同じように見えます。

関数式の明示的な代入と関数宣言の 2 つの形式があります。関数宣言は関数式に変更され、宣言自体が関数の先頭に引き上げられます (巻き上げ)。

詳細はこちら: http://elegantcode.com/2011/03/24/basic-javascript-part-12-function-hoisting/

于 2013-01-09T21:16:06.413 に答える