返回变量而不声明它的函数

Function returning a variable without declared it

本文关键字:函数 声明 变量 返回      更新时间:2023-09-26

我最近在敲除库的代码中搜索,以查找可观察量如何在我们调用时与计算函数创建依赖关系。

在源代码中,我发现了链接到可观察量创建的函数:

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;
}

我认为非常奇怪的是"可观察"的返回,我没有找到这个变量的任何声明。当然,创建这个图书馆的伟人不会忘记宣布它。

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

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

编辑:在网上搜索后,我找到了这篇文章。

在这篇文章中,这家伙写道:

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

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

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

仅当您有意时才使用表达式。例如,条件函数定义。

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

observable是一个

变量。它由函数声明声明。

function observable() {
    ...
}

在Javascript中,也可以返回函数。在函数中,他定义了函数"observable",该函数在函数末尾返回。

排序说话,函数也是变量。里面有一个功能。