函数声明和函数表达式

Javascript: function declaration and function expression

本文关键字:函数 表达式 声明      更新时间:2023-09-26

我不理解书中给出的以下Javascript示例"Head First Javascript programming 2014"在第469页。谁能给我解释一下(新手)?谢谢你的帮助。

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

console log打印> hello1

这个没有问题。

function boo(aFunction) {
    aFunction("boo2");
}
我完全不明白这部分。我可以声明"(函数)"作为函数"boo"的参数,而无需首先声明"函数"做什么?

函数function ("boo2");"是如何工作的?我正在传递一个字符串调用"boo2"到函数?但是我不需要在传递字符串之前声明函数首先做什么吗?

boo(fun);

console log prints> boo2

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

console.log(fun);

console log打印> function fun(echo) {console.log(echo);}

我认为这只是打印出函数"fun"的类型,所以这是ok的。

fun(boo);

console log打印> function boo(function) {function ("boo");}

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

var moreFun = fun;
moreFun("hello again3");

console log prints> hello again

我把它读成var morefun指向/引用fun。所以它"变得"有趣了。

function echoMaker() {
    return fun;
}
var bigFun = echoMaker();
bigFun("Is there an echo4?");

console log prints>是否有回声?

Q4:为什么它打印出字符串"Is there an echo4?"返回乐趣"是做什么的?我没有将字符串"Is there an echo4?"传递给函数"fun",那么它如何在这里打印出字符串呢?

第一部分:

函数可以在其他函数中作为参数传递(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?");

It will do

fun("Is there an echo4");

,然后执行console.log