- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 JavaScript,对代码示例的逻辑感到困惑。来自代码学院。为什么函数调用中会有函数设置?我很困惑。我正在从简化的类 C 语言转移。
JavaScript 示例
var main = function(){
$('.article').click(function(){
$('.description').hide();
$(this).children('.description').show();
});
};
我的理解: - main 是一个返回类型为 var 的函数名。
$('.article')
是元素/对象/或类对象。
.click()
是对成员函数的调用
???:
.click(function(){
$('.description').hide();
$(this).children('.description').show();
});
这似乎是一个新创建的函数,当/如果 click()
被激活或运行时运行。
我以前的想法是这样的:
var *p_obj = $('.article');
var *p_obj = $('.description');
var do_click()
{
p_obj2.hide();
p_obj.children(p_obj2).show();
}
var main(){
p_obj.click(do_click);
}
函数 main()
查看 p_obj
并调用 click()
。
Click()
评估为 true
/false
并运行 pointer_to 函数 do_click()
。
函数 do_click()
查看 p_obj2
并调用 hide()
,它执行隐藏 p_obj2< 的操作
.
函数 do_click()
也会查看 p_obj
并使用子项将焦点范围限定到 p_obj2
,然后运行 show()
,执行显示p_obj2
的 Action 。
我确实意识到我的类 C 示例是错误和奇怪的。我意识到我的术语有误或使用不当。
这种设计看起来像是我必须在每次调用 .click()
时现场编写扩展功能,所以 if-then .click()
在 3 个不同的项目上运行,我正在为每个对象创建不同的扩展功能。但我通常会创建一个函数,该函数根据 click()
调用它的对象或条件来改变其内部执行。
如果代码相对简单或较短,此设置似乎没问题,但现场功能似乎对较长的代码和功能重复但对象发生变化的代码过度工作。
我是否正确地考虑了 JavaScript 函数 with-in 函数,这是语言的设计目标是添加长重复的扩展函数 with-in 函数吗?
最佳答案
在这里,你应该明白两件事:
第一个概念特别重要,因为回调在 JavaScript 中很流行,所以让我为回调解释一下。假设我们有 2 个函数 getStuffFromWeb
和 processStuff
。您可能希望它们像这样使用:
var result = getStuffFromWeb();
processStuff(result);
但这里的问题是等待 getStuffFromWeb
可能需要一些时间(服务器繁忙),因此通常以“完成后调用此函数”的方式使用它们,即:
var getStuffFromWeb = function(params,callback) {
...
callback(result);
};
getStuffFromWeb(someParams,processStuff);
嗯,事实上 getStuffFromWeb
的结构会有所不同,很可能是这样的:
var getStuffFromWeb = function(params,callback) {
requestObject.make_request(params)
.onSuccess(callback);
};
所以当 getStuffFromWeb
被调用时,它开始监听响应,而 getStuffFromWeb(someParams,processStuff);
之后的代码继续评估。当响应到来时,它调用回调函数使用我们定义的过程 (processStuff
) 进一步处理数据。
第二个概念很简单:你当然可以这样写
var processStuff = function() {...};
var getStuffFromWeb = function(params,callback) {
requestObject.make_request(params)
.onSuccess(callback);
};
getStuffFromWeb(someParams,processStuff);
但是如果你只使用一次processStuff
,为什么要定义一个命名函数呢?相反,您可以将完全相同的表达式放在 onSuccess
参数中,如下所示:
var getStuffFromWeb = function(params) {
requestObject.make_request(params)
.onSuccess(function() {...});
};
getStuffFromWeb(someParams);
如果我们获取 processStuff
的值并将其直接放入 onSuccess
的参数(这称为匿名功能)。我们还去掉了 getStuffFromWeb
的额外参数。
基本上就是这样。
关于JavaScript实例,阐明函数with-in函数的语言模式设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38031556/
我声明了一个通用结构和这些结构的数组,如下所示: struct A { int x,y,z; char a,b,c; }; struct A *str_arr[5]; 根据我的理解,s
我对 CUDA 编程指南 4.0 部分 5.3.2.1 中的以下语句感到困惑 在性能指南的章节中。 Global memory resides in device memory and device
我想知道这两者之间有什么区别: addCompilerPlugin("org.typelevel" %% "kind-projector" % "0.11.3" cross CrossVersion.
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 5 年前。 Improv
结构体的析构函数: 您能否指定必须在结构的析构函数中显式处理的每种数据类型? struct Node { int val; // representing any
我试图通过创建我自己的同名扩展方法来修改现有扩展方法的行为。我知道只要方法签名不同,这是可能的。我还知道调用哪个方法取决于签名的关闭程度。 如果我有 public void DoStuff(this
取自:https://www.gnu.org/software/libc/manual/html_node/Nonreentrancy.html For example, suppose that t
谁能帮忙解释一下 bind 在这种情况下的用途是什么? Add New https://youtu.be/OKRu7i49X54?list=PL6gx4Cwl9DGBuKtLgPR_zWYnrwv-J
目前我将 glFrustum 设置为 glFrustum(0, 100.0, 0, 100.0, -50, 50); 我的图像是一个矩形立方体,尺寸为:当形状的尺寸小于查看框时,为什么我看不到图像?
我面临着与该线程中描述的类似的问题: Can Enunciate generate docs for an API that handles generic types? 我正在使用 enunciat
有人能解释一下这段代码是如何工作的吗? PRE_PROC_EXE := $(shell which pre_proc.pl) PRE_PROC2_EXE := $(shell
使用 Prompter 方法在 FormFlow 中发送自定义卡片。查看代码发现有一个 GenerateMessages() 方法,对于下面的代码,它总是返回 false。有人可以阐明为什么/何时使用
我在谷歌上找不到任何东西。 我有这段代码: Random r = new Random(); int[] output = Enumerable.Range(0, 11).Select(x => x
我正在阅读 Eric Meyer 撰写的 CSS 权威指南第 3 版。 他关于字体大小的部分(第 107 页)指出字体大小决定了 em 框。如果我这样做: span { font-size: 10px
我对ElasticSearch的使用有些困惑。我现在有一个带有关系数据库(Ruby on Rails)的应用程序(Mysql),我正试图从ElasticSearch提供的搜索功能中受益。我仍然想像以前
有Java背景,但是从未开发过 Web 客户端(即由浏览器运行的脚本),但是java小程序(我怀疑是,嗯,老式的(对吧?)或者其他我显然会将它们用于以下一些用途) 然后考虑以下场景: 仅客户端应用程序
假设我有一个子函数: function Child() {} 并且有一个父函数: function Parent() {} 然后我将 Child 的原型(prototype)设置为 Parent 的新
程序如下: #include using namespace std; class X { int no; public: X(int n=1) : no{n} {} X(const
阅读文档: del: Deletion of a target list recursively deletes each target, from left to right. 你能解释一下为什么这
我对 C/C++ 中的悬挂指针有点困惑 void remove(){ Node* curr = new Node(10); Node* pt = curr; delete curr; // do so
我是一名优秀的程序员,十分优秀!