jars关闭函数与变量?

时间:2013-01-09 21:13:26

标签: javascript closures

  

可能重复:
  JavaScript: var functionName = function() {} vs function functionName() {}

是否有任何适用的原因可以使用var而不是常规函数定义来声明函数,尤其是在处理闭包时。

显然,在我演示之前,这可能没什么意义,所以我会这样做!

注意:我使用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;
})

我认为两者之间肯定存在一些差异,可能......:)

感谢您的时间和精力!


编辑: 试图以更明智的方式提出这个问题!

1 个答案:

答案 0 :(得分:0)

没有真正的收获。示例A中的函数声明更改为函数表达式并提升到闭包的顶部,因此在示例B中的var声明被提升后,它们看起来与您在第一个示例中定义的相同。 / p>

您拥有的两种形式是函数表达式函数声明的显式赋值。函数声明变为函数表达式,声明本身被拉到顶部功能(吊装)。

在此处阅读更多内容:http://elegantcode.com/2011/03/24/basic-javascript-part-12-function-hoisting/