函数声明和函数表达式
Javascript: function declaration and function expression
我不理解书中给出的以下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
- 能够在定义函数表达式之前使用它
- 函数表达式,返回回调函数
- JavaScript中的立即调用函数表达式(IIFE)-传递jQuery
- 函数声明与函数表达式之间的性能差异
- 立即调用函数表达式(IIFE)相对于普通函数的优势
- 如何防止 JS 缩小删除命名函数表达式的名称
- Angularjs 与 coffeescript 函数表达式中断
- JavaScript 混乱中的函数表达式
- 从ES6中的函数表达式访问类作用域
- 提升作为数组项的匿名函数表达式
- Javascript Mocha测试-测试函数表达式中的函数表达式
- 函数中的JavaScript函数表达式
- Javascript闭包覆盖函数表达式
- 函数表达式的词法作用域
- 请解释一下“;立即调用函数表达式“;以及“;自调用匿名函数”;
- JavaScript 中的函数语句和函数表达式
- ng-class 的函数表达式在 ng-click 时被调用
- 如何创建名称和主体存储在不同变量中的 JavaScript 函数表达式
- Object.Prototype 方法和 IIFE(立即调用的函数表达式)中的“use strict”
- 全局范围内的函数表达式与函数声明的区别