函数返回变量而不声明它

时间:2014-11-29 00:43:46

标签: javascript variables knockout.js function-declaration

我最近搜索了knockout库的代码,以便在我们调用它时找到observable如何能够使用计算函数创建依赖项。

在源代码中,我发现链接到observables创建的函数:

ko.observable = function (initialValue) {
    var _latestValue = initialValue;

    function observable() {
        if (arguments.length > 0) {
            // Write

            // Ignore writes if the value hasn't changed
            if (observable.isDifferent(_latestValue, arguments[0])) {
                observable.valueWillMutate();
                _latestValue = arguments[0];
                if (DEBUG) observable._latestValue = _latestValue;
                observable.valueHasMutated();
            }
            return this; // Permits chained assignments
        }
        else {
            // Read
            ko.dependencyDetection.registerDependency(observable); // The caller only needs to be notified of changes if they did a "read" operation
            return _latestValue;
        }
    }
    ko.subscribable.call(observable);
    ko.utils.setPrototypeOfOrExtend(observable, ko.observable['fn']);

    if (DEBUG) observable._latestValue = _latestValue;
    observable.peek = function() { return _latestValue };
    observable.valueHasMutated = function () { observable["notifySubscribers"](_latestValue); }
    observable.valueWillMutate = function () { observable["notifySubscribers"](_latestValue, "beforeChange"); }

    ko.exportProperty(observable, 'peek', observable.peek);
    ko.exportProperty(observable, "valueHasMutated", observable.valueHasMutated);
    ko.exportProperty(observable, "valueWillMutate", observable.valueWillMutate);

    return observable;
}

我认为非常奇怪的是“可观察到的'我在哪里找不到这个变量的声明。当然,创建这个图书馆的伟人不会忘记宣布它。

如何在不声明变量的情况下使用变量并防止将变量置于全局范围内?

我的感觉是,当在另一个函数中声明此函数声明时,我们可以使用函数声明作为变量,但我真的不确定它是如何工作的。

修改 在网上搜索后,我发现了article

在这篇文章中,这个人写了这个:

请使用声明 "在没有经验的开发人员的代码中,函数通常由表达式声明:

... code ... var f = function(){...} ... 函数声明更具可读性和更短。请改用它们。

... code ... function f(){...} ... 此外,可以在定义之前调用以这种方式声明的函数。

仅在您的意思是使用表达式。例如,条件函数定义。"

好的,我是一个没有经验的开发人员吗?我不这么认为。我只是没有读过Javascript的所有可能性。 :)

2 个答案:

答案 0 :(得分:2)

observable是一个变量。它由function declaration声明。

function observable() {
    ...
}

答案 1 :(得分:0)

在Javascript中,也可以返回函数。在函数中,他定义了在函数末尾返回的函数“observable”。

排序说话,功能也是变量。内置功能。<​​/ p>