我不理解本书提供的以下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?"功能"有趣",那么如何在这里打印出字符串呢?
答案 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