Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么从函数返回true或false?_Javascript_C#_Jquery - Fatal编程技术网

Javascript 为什么从函数返回true或false?

Javascript 为什么从函数返回true或false?,javascript,c#,jquery,Javascript,C#,Jquery,我目前正在研究Mikowski和Powell的单页Web应用程序。在完成了第1章中的简单教程之后,我不明白为什么必须在toggleSlider()、onClickSlider()和initModule()函数中返回true和返回false 这样做的额外好处是什么?当我在没有返回true和false的情况下运行下面的代码时,它的工作原理与返回语句完全相同 在什么情况下,拥有这些返回语句实际上是有益和必要的 var spa = (function($) { var configMap = {

我目前正在研究Mikowski和Powell的单页Web应用程序。在完成了第1章中的简单教程之后,我不明白为什么必须在
toggleSlider()
onClickSlider()
initModule()
函数中
返回true
返回false

这样做的额外好处是什么?当我在没有返回true和false的情况下运行下面的代码时,它的工作原理与返回语句完全相同

在什么情况下,拥有这些返回语句实际上是有益和必要的

var spa = (function($) {
  var configMap = {
      extended_height: 434,
      extended_title: 'Click to retract',
      retracted_height: 16,
      retracted_title: 'Click to extend',
      template_html: '<div class="spa-slider"><\/div>'
    },
    $chatSlider,
    toggleSlider, onClickSlider, initModule;

  toggleSlider = function() {
    var slider_height = $chatSlider.height();

    if (slider_height === configMap.retracted_height) {

      $chatSlider
        .animate({
          height: configMap.extended_height
        })
        .attr('title', configMap.extended_title);
      return true;

    } else if (slider_height === configMap.extended_height) {
      $chatSlider
        .animate({
          height: configMap.retracted_height
        })
        .attr('title', configMap.retracted_title);
      return true;

    }

    console.log("Nothing to extend or retract. No events fired.");
    return false;
  };

  onClickSlider = function(event) {
    console.log("Calling onClickSlider click event");
    toggleSlider();
    return false;
  };

  initModule = function($container) {
    $container.html(configMap.template_html);

    $chatSlider = $container.find('.spa-slider');

    $chatSlider
      .attr('title', configMap.retracted_title)
      .click(onClickSlider);

    return true;
  };

  return {
    initModule: initModule
  };

}(jQuery));

jQuery(document).ready(
  function() {
    spa.initModule(jQuery('#spa'));
  }
);

body {
  width: 100%;
  height: 100%;
  overflow: hidden;
  background-color: #777;
}
#spa {
  position: absolute;
  top: 8px;
  left: 8px;
  bottom: 8px;
  right: 8px;
  border-radius: 8px 8px 0 8px;
  background-color: #fff;
}
.spa-slider {
  position: absolute;
  bottom: 0;
  right: 2px;
  width: 300px;
  height: 16px;
  cursor: pointer;
  border-radius: 8px 0 0 0;
  background-color: #f00;
}

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <div id="spa">
        <div class="spa-slider"></div>
    </div>
</script>
var spa=(函数($){
var configMap={
延伸高度:434,
扩展标题:“单击以收回”,
缩回高度:16,
收回标题:“单击以扩展”,
模板\u html:'
},
$chatSlider,
toggleSlider、onClickSlider、initModule;
toggleSlider=函数(){
var slider_height=$chatsslider.height();
if(滑块高度===configMap.retracted高度){
$chatSlider
.制作动画({
高度:configMap.extended\u高度
})
.attr('title',configMap.extended_title);
返回true;
}else if(滑块高度===configMap.extended高度){
$chatSlider
.制作动画({
高度:configMap.retracted\u高度
})
.attr('title',configMap.retracted_title);
返回true;
}
log(“无需扩展或收回,无触发事件”);
返回false;
};
onClickSlider=函数(事件){
log(“调用onClickSlider单击事件”);
切换滑块();
返回false;
};
initModule=函数($container){
$container.html(configMap.template\u html);
$chatsslider=$container.find('.spa slider');
$chatSlider
.attr('title',configMap.retracted_title)
。单击(单击滑块);
返回true;
};
返回{
initModule:initModule
};
}(jQuery));
jQuery(文档).ready(
函数(){
initModule(jQuery('#spa');
}
);
身体{
宽度:100%;
身高:100%;
溢出:隐藏;
背景色:#777;
}
#温泉{
位置:绝对位置;
顶部:8px;
左:8px;
底部:8px;
右:8px;
边界半径:8px 8px 0 8px;
背景色:#fff;
}
.spa滑杆{
位置:绝对位置;
底部:0;
右:2px;
宽度:300px;
高度:16px;
光标:指针;
边界半径:8px0;
背景色:#f00;
}

通常,在事件处理程序中,返回false是告诉事件不要实际触发的一种方法。例如,在onsubmit案例中,这意味着表单未提交

在您的示例中,
返回true
将使动画发生,而
返回false不会


或者,您可以这样做,而不是
返回false

Javascript函数中类似的返回值通常用于指示成功或失败。您可以通过执行以下操作来创建简单的流控制结构:

var doSomething = function() {
    if (error) { 
        return false; 
    } else { 
        return true; 
   }
};

if (doSomething()) { 
    doSomethingElse(); 
} else { 
    console.log("There was an error!"); 
}
这就是说,除了快速演示之外,将其用于任何事情都不是一个好主意
return false
以纯粹以这种方式使用时产生意外结果而臭名昭著-几乎总是有更好的选项来实现您的目标(除非您的目标是返回布尔值!)。如果您只需要转义一个活动函数,您可以使用
return


在您的特定代码中,
toggleSlider()
似乎返回这些值以指示活动,而
onClickSlider()
使用
return false
代替
e.preventDefault()
,正如Nicholas在回答中提到的那样。你可以在这里阅读更多关于为什么这通常是一个坏主意的信息:

在我看来,你在寻找一个真正没有的硬性规则

你问“为什么”这个规则存在,而实际上它不存在

您仍在阅读Mikowski和Powell的单页Web应用程序的第1章,我很高兴他们能让您思考并注意到函数的返回值

有许多可能的返回值-
true
false
只是两个非常常见且非常重要的选项

在更高级的函数中,您可能会发现自己返回了任意数量不同返回值的
self
对象
——所有这些都取决于应用程序的体系结构和需要

例如,在面向对象编程中,为简单函数返回
self
越来越常见。这允许您在一行中链接不同的功能。。。但是面向对象编程与第1章有什么关系呢

我建议你给自己更多的时间和经验。现在,我建议你相信这个过程。Mikowski和Powell正在尽最大努力为你提供大量知识。。。但他们必须把它分成小块和小块


祝你好运

据我所知,这些返回值毫无用处。我怀疑这只是作者的个人风格,他喜欢有明确的回报值
toggleSlider
使用返回值指示它是否执行了任何操作,这对于控制台中的调试可能很有用,尽管它也使用
console.log()
用于相同的目的。@nhgrif我道歉。我收回了对代码审查的引用。我的观点仍然站在这里,虽然这似乎也不是主题,因为它不是问海报找不到解决方案的特定问题。@Claies那么我建议找到一个接近的理由并投票支持它,或者投票否决它?你肯定这个问题是离题的,但没有反对票和反对票。对我来说,这个问题似乎很好,真的。@nhgrif——我对我问题的结构表示歉意。才刚开始你