2 yy211zhu yy211zhu 于 2017.01.12 11:01 提问

怪异的执行顺序 ,大家看看什么问题
    function  a(){
        console.log("i am a");
    };
    function b(){
        console.log("i am b");
    };
    function callBack(a,callback){
            a();
        setTimeout(function(){
            callback;
        },1000)
    };
    callBack(a,b());

优先输出 i am b ,也就是b函数先执行了!为什么啊?
但是稍微改下:

  function  a(){
        console.log("i am a");
    };
    function b(){
        console.log("i am b");
    };
    function callBack(a,callback){
        a();
        setTimeout(function(){
            callback();
        },1000)
    };
    callBack(a,b);

输出就正常了!为什么 ?立即执行

3个回答

showbo
showbo   Ds   Rxr 2017.01.12 11:41
已采纳
callBack(a,b());
    第二个参数你搞错了,b()是执行b函数后将b的返回值作为参数值传入
GerryLee
GerryLee   2017.01.12 11:38

因为b是函数对象,b()则是执行函数后返回的结果(这里是undefined)。所以第一种方式先执行b(),将返回的结果undefined作为参数调用callback,即执行callback(a,undefined)
当然结果不正确啦。

tiandirenjian941
tiandirenjian941   2017.01.12 11:43

第一个方法中使用b()作为参数时,此时b()为一个实例,在调用处直接执行了。。。在settimeout中并未执行

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
大家看看
<br />最近下东西老是没有积分怎么办呢!各位积极发言吧。
Ubuntu 下的硬盘“分区”
大家都看到了,我一直是给“分区”,加了引号,因为在任何的“类Linux”系统里(比如红旗,红帽子,Ubuntu),他们并没有硬盘分区这个概念,这个和Windows是有本质区别的。 一.挂载点 在Linux系统里面,“分区”,被称作“挂载点”,简单明了的说,“挂载点”意思就是:把一部分硬盘容量,“分”成一个文件夹的形式,用来干什么事情。这个文件夹的名字,就叫做:“挂载点”。所以,和Windo
大家看看这段代码有什么问题
副表EI在程序运行中已打开 子表EI1是空的 我的目标是将父表中指定字段的数据导入子表   SELECT 2   USE Ei1  &&在工作区2打开子表   nFldCount =AFIELDS(aFldList,"B")   K=RECCOUNT()   INDEX TO ExportID ON 姓名+身份证号   SELECT Ei   SET RELATION TO 姓名
黑马程序员——java基础第一课
01_计算机基础知识(计算机概述)A:什么是计算机? 计算机(Computer)全称:电子计算机,俗称电脑。是一种能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。 由硬件和软件所组成,没有安装任何软件的计算机称为裸机。常见的形式有台式计算机、笔记本计算机、大型计算机等。 计算机的应用已渗透到社会的各个领域,正在改变着人们的工作、学习和生活的方式,推动着社会
多重继承-构造函数与析构函数执行顺序
class Base{Base(int i){ }        ~Base(){ }}; class Derive:public Base{Derive::Derive(int i,int j,int k):Base(i),d(j),y (k){}   ~Derive(){}}; int main() { Derive obj(1,2,3); return 0; } 说明:Deri
第一节:开发工具介绍及环境变量配置(讲师笔记篇)
01.01_计算机基础知识(计算机概述)(了解) A:什么是计算机?计算机在生活中的应用举例 计算机(Computer)全称:电子计算机,俗称电脑。是一种能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。由硬件和软件所组成,没有安装任何软件的计算机称为裸机。常见的形式有台式计算机、笔记本计算机、大型计算机等。应用举例 1:科学计算2、数据处理3、自动控制4、计算机辅助
DOCTYPE声明——标准模式与怪异模式的区别
DOCTYPE声明:告知浏览器如何解析和渲染文档 DTD:文档类型定义 分类方式一1、标准模式:浏览器按W3C标准解析执行代码 ① 如果XHTML文档包含完整的DOCTYPE,那么它一般以标准模式呈现; ② 包含严格dtd的doctype和包含过渡dtd和URI的doctype常常导致页面以标准模式呈现;2、怪异模式:使用浏览器自己的方式解析执行代码,因为不同浏览器解析执行
怪异盒模型 box-sizing
box-sizing : content-box/border-box (border-box )盒模型 : width =   内容宽 (content-box )怪异盒模型 : width = padding + border + 内容宽   怪异盒模型一般用于移动端布局。
怪异盒子模型、弹性盒子模型
标准盒子模型:content+(padding+border+margin)*2 怪异盒子模型:conten+margin*2      //conent已经包括来padding和border(当不对doctype进行解析时会出现这种) 弹性盒子模型:相比传统的盒子模型。该模型能很轻松的创造出自适应的弹性流动布局和自适应的字体 .parent{ width: 900px;
HTML5基础加强css样式篇(css属性:怪异盒模型解析)(四十六)
1.怪异盒模型和border有关: 设置border宽度可以影响其他元素的布局:但是在IE5及以下里面只是影响其子元素; 2.可以同时设置 box-sizing属性来使用这一特性,是其改变border宽度也不影响其他元素; 3,.box-sizing:简单理解就是盒子大小基于什么计算的;      2.使用如下:     .box-wr