Javascript:函数声明和函数表达式

时间:2014-08-26 01:50:01

标签: javascript

我不理解本书提供的以下Javascript示例" Head First Javascript Programing 2014"在第469页。任何人都可以向我解释(新手)?谢谢你的帮助。

function fun(echo) { 
    console.log(echo);
};

fun("hello1");

控制台日志打印> hello1

没问题。

function boo(aFunction) {
    aFunction("boo2");
}

Q1:我根本不理解这部分内容。我可以宣布"(aFunction)"作为功​​能的论证" boo"没有第一次声明什么" aFunction"呢?

功能" a功能如何(" boo2");"作品?我正在通过字符串调用" boo2"进入aFunction?但是,我不需要声明aFunction在传递字符串之前先做了什么?

boo(fun);

控制台日志打印> boo2

Q2:为什么打印" boo2"?我的困惑源于上一个问题。也许如果得到回答,我可以理解这一部分吗?

console.log(fun);

控制台日志打印> function fun(echo){console.log(echo);}

我认为这只是打印出功能类型"有趣",所以没关系。

fun(boo);

控制台日志打印> function boo(aFunction){aFunction(" boo");}

问题3:为什么打印出功能" boo的类型?"

var moreFun = fun;

moreFun("hello again3");

控制台日志打印>你好再来3

我把它读作var morefun指向/引用乐趣。所以它变成了#34;乐趣。所以这没关系。

function echoMaker() {
    return fun;
}

var bigFun = echoMaker();
bigFun("Is there an echo4?");

控制台日志打印>有回音吗?

问题4:为什么打印出字符串"是否有echo4?" "返回乐趣是什么;"做?我没有传递字符串"是否有echo4?"功能"有趣",那么如何在这里打印出字符串呢?

1 个答案:

答案 0 :(得分:0)

第一部分:

函数可以作为参数在其他函数中传递(Javascript之美)所以在你的情况下:

function boo(aFunction) {
    aFunction("boo2");
}

你在函数boo中传递函数体,因为你在运行时绑定的函数是

function fun(echo) { 
    console.log(echo);
};

它接受一个参数,因此回声。所以在javascript中它会进行后期绑定(不是编译时)因此它永远不会出错。即使您传递多个参数,它也会占用第一个并在控制台中打印。我认为这也回答了你的第二个问题。

你的上一个问题:

function echoMaker() {
    return fun;
}

在这里你返回一个功能。所以在这个声明中

var bigFun = echoMaker();

你执行了echoMaker(),现在将导致

bigFun = fun;

因此当你做

bigFun("Is there an echo4?");

它会做

fun("Is there an echo4");

然后执行console.log

相关问题