javascript - 存储一组独特的功能
问题描述
<!DOCTYPE html>
<html>
<head>
<title>Storing a collection of unique functions</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="assert.css">
<script src="assert.js"></script>
</head>
<body>
<script>
var store = {
nextId: 1,
cache: {},
add: function(fn) {
if (!fn.id) {
fn.id = this.nextId++;
this.cache[fn.id] = fn;
return true;
}
}
};
function ninja() {}
assert(store.add(ninja), "Function was safely added.");
assert(!store.add(ninja), "But it was only added once.");
</script>
</body>
</html>
这是 assert.js 文件
function assert(value, text) {
var li = document.createElement("li");
li.className = value ? "pass" : "fail";
li.appendChild(document.createTextNode(text));
var results = document.getElementById("results");
if (!results) {
results = document.createElement("ul");
results.setAttribute('id','results');
document.body.appendChild(results);
}
results.appendChild(li);
}
function pass(text) { assert(true, text); }
function fail(text) { assert(false, text); }
function report(text) { pass(text); }
此代码来自“javascript ninja 的秘密,第二版”。我的问题是关于if (!fn.id)
这行代码。什么是身份证?怎么样 !逻辑上不在 fn 之前?
提前致谢。
解决方案
该名称是您传递给方法fn
的任何参数(函数)的别名。该属性提供了一种识别内部函数的独特方法。Ninja
store.add
fn.id
Ninja
store.cache
该检查if (!fn.id)
用于检查 是否id
为假,在这种情况下意味着该属性尚未定义。如果未定义,则通过将其设置为来定义它,store.nextID
然后使用该 id 作为在fn
内部存储和访问的键store.cache
。
推荐阅读
- sql - 如何计算选择查询中的百分比变化
- php - CodeIgniter 使用 Gmail SMTP 发送电子邮件
- php - 如何从两个相关表中收集数据
- python - Optuna 超参数优化:定义目标函数之外的超参数空间
- node.js - 使用节点加密 scryptSync 的哈希密码
- python-3.x - 试图通过postgresql复制文件创建复制到使用python的命令
- android - MaterialButton app:icon 属性未呈现
- c# - 如何将精度添加到十进制值
- java - 使用 JUnit 测试 Spring 应用程序 - 在 testclass 之后保留数据
- laravel - 在 Git 中分离项目的不同部分