我最近搜索了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的所有可能性。 :)
答案 0 :(得分:2)
observable
是一个变量。它由function declaration声明。
function observable() {
...
}
答案 1 :(得分:0)
在Javascript中,也可以返回函数。在函数中,他定义了在函数末尾返回的函数“observable”。
排序说话,功能也是变量。内置功能。</ p>