理解函数和语义
Understanding Functions and the semantics
好的,请温柔点,我正在学习Javascript。
我有两个按钮(HTML5 <button>
标签),他们都设置为调用相同的函数,在该函数是另外两个函数(显示+隐藏),现在,我想知道这是正确的,即如果我点击按钮隐藏,它调用函数可见性,然后调用函数隐藏和隐藏在这个函数中定义的一切,包括原来的按钮。但是,如果我点击按钮显示,它隐藏原始内容,并显示额外的内容,与更多的按钮。(可点击整个过程)或者是否可以在此函数中单独调用这些函数,例如:
function visible() {
function show() {
slide = document.getElementById('side');
pos = 0;
move = setInterval(slider, 1000/60);
slide1 = document.getElementById('main');
pos1 = 100;
move1 = setInterval(slider1, 1000/60);
document.getElementById('welcomer').style.display = 'none';
document.getElementById('welcome').style.display = 'none';
function slider() {
if (pos == 20) {
clearInterval(move);
}else {
pos++;
slide.style.display = 'block';
slide.style.width = pos + '%';
}
}
function slider1() {
if (pos1 == 80) {
clearInterval(move1);
}else {
pos1--;
slide1.style.width = pos1 + '%';
}
}
}
function hide() {
slide = document.getElementById('side');
pos = 0;
move = setInterval(slider, 1000/60);
slide1 = document.getElementById('main');
pos1 = 100;
move1 = setInterval(slider1, 1000/60);
document.getElementById('welcomer').style.display = 'none';
document.getElementById('welcome').style.display = 'none';
function slider() {
if (pos == 20) {
clearInterval(move);
}else {
pos++;
slide.style.display = 'block';
slide.style.width = pos + '%';
}
}
function slider1() {
if (pos1 == 80) {
clearInterval(move1);
}else {
pos1--;
slide1.style.width = pos1 + '%';
}
}
}
document.getElementById('vis').addEventListener('click', show());
document.getElementById('invis').addEventListener('click', hide());
}
或者在语义上不使用嵌套函数,而是使用两个单独的函数,并在单击时分别调用函数。例如:
function show() {
slide = document.getElementById('side');
pos = 0;
move = setInterval(slider, 1000/60);
slide1 = document.getElementById('main');
pos1 = 100;
move1 = setInterval(slider1, 1000/60);
document.getElementById('welcomer').style.display = 'none';
document.getElementById('welcome').style.display = 'none';
function slider() {
if (pos == 20) {
clearInterval(move);
}else {
pos++;
slide.style.display = 'block';
slide.style.width = pos + '%';
}
}
function slider1() {
if (pos1 == 80) {
clearInterval(move1);
}else {
pos1--;
slide1.style.width = pos1 + '%';
}
}
}
function hide() {
slide = document.getElementById('side');
pos = 0;
move = setInterval(slider, 1000/60);
slide1 = document.getElementById('main');
pos1 = 100;
move1 = setInterval(slider1, 1000/60);
document.getElementById('welcomer').style.display = 'none';
document.getElementById('welcome').style.display = 'none';
function slider() {
if (pos == 20) {
clearInterval(move);
}else {
pos++;
slide.style.display = 'block';
slide.style.width = pos + '%';
}
}
function slider1() {
if (pos1 == 80) {
clearInterval(move1);
}else {
pos1--;
slide1.style.width = pos1 + '%';
}
}
}
或者是可能的,对于按钮隐藏,我只是创建一个数组,我想要隐藏的每个ID/类元素,调用按钮上的onclick来隐藏,然后将该数组中的所有元素的样式更改为display: none;
?反之亦然对于div,我用button show创建?
现在我明白很多这可以被认为是固执己见的,所以我问的原因是:我想知道哪种是使用香草javascript最快的方法,哪种方法会缩短代码量,减少加载时间,基于事实的最佳结果。
请注意,我不得不写这段代码几乎零知识,因为我是学习 Javascript,这些主要是例如,和显示/隐藏做完全相同的事情现在,最终显示函数将创建更多的div和内容等
嵌套函数是完全可以接受的,而且通常是可取的,甚至是必要的。这样做的语法如下:
function base_function(){
this.function_1 = function(){};
this.function_2 = function(){};
}
定义了一个有两个值的函数构造函数…Function_1和function_2。然后,您可以使用以下
调用它们中的任何一个var base = new base_function();
base.function_1();
现在,如果您只需要在base_function的作用域中引用这些子函数,那么下面的内容就足够了。
function base_function(){
function child_function_1(){}
function child_function_2(){child_function_1();}
}
把function
想象成js中的数据类型,比如字符串或数字类型。您可以将其传递给变量,稍后在代码中引用它,将其作为回调传递(如setTimeout
中,您将引用作为变量传递给函数)。即setTimeout(function_1,1000)
而不是setTimeout(function_1(),1000)
)。因此,你也可以使用var function_1 = function(){}
来声明函数(这是我的首选方法)。
由于javascript处理函数的方式,你可以用它们做一些有趣和超级酷的事情——比如闭包或IIFYs!这里有一个很好的解释,以及如何使用它们!
为了回答你的问题,我建议采用第一种方法,同时在引用你想要显示/隐藏的内容的函数中保留一个变量。即使这意味着你需要写一些额外的行,当你保持模块化时,它会使代码更具可读性,可读性在大多数情况下真的是王道。
像这样
var Vis_Controller = function(content){
this.content = content;
this.hide = function(){
content.style.display = "none";
}
this.show = function(){
content.style.display = "block";
}
}
window.addEventListener("load", function(){
var content = document.getElementById("content");
var button_show = document.getElementById("button-show");
var button_hide = document.getElementById("button-hide");
var vis_controller = new Vis_Controller(content);
button_show.addEventListener("click",vis_controller.show);
button_show.addEventListener("click",vis_controller.hide);
});
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 如何在JavaScript中将字符串转换为函数引用
- 用嵌套函数和默认函数定义函数
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- JQuery合并了keyup和focusout两个函数
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 我可以在json对象中添加一个函数吗
- AngularJS:我可以跳过函数参数回调吗
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- jquery html()编写函数以包含语义html元素
- 使用语义 UI 选项卡启用的多个路由的文档就绪函数应该去哪里
- 带构造函数的语义JavaScript单例
- 在语义界面验证表单中添加onSubmit函数
- 理解函数和语义
- ES6中块级函数的精确语义是什么?