返回变量而不声明它的函数
Function returning a variable without declared it
我最近在敲除库的代码中搜索,以查找可观察量如何在我们调用时与计算函数创建依赖关系。
在源代码中,我发现了链接到可观察量创建的函数:
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",该函数在函数末尾返回。
排序说话,函数也是变量。里面有一个功能。
相关文章:
- 直接在函数声明上使用function.prototype.bind
- 可以Resharper在我的javascript函数声明中添加分号
- 此行是否包含函数声明
- 函数声明与函数表达式之间的性能差异
- 为什么在javascript函数声明中使用逻辑运算符
- 函数声明未定义-原因
- JavaScript执行从函数声明开始,而不是从$(document).ready()开始
- 杰辛特 |传递默认设置 |函数声明和“this”
- 未知的 JavaScript 函数声明模式
- JavaScript 中的函数声明
- 在函数声明而不是运行时分析所有变量
- 命名函数声明有什么好处吗
- 将一个简单的函数声明形成JavaScript中的闭包
- 返回语句后的函数声明全局变量不会被覆盖
- (this)在函数声明之后
- 为什么使用 ||在变量函数声明中
- 为什么要将函数声明分配给命名变量
- 具有相同参数的 Javascript 函数声明
- 从性能的角度来看,函数声明与表达式
- 为什么 Mozilla Javascript 调试器的断点会捕捉到函数声明