因为函数是Javascript世界的第一等公民,指的是函数与其他数据类型一样,处於平等地位,可以赋值给其他变数,也能作为参数传入另一个函数,或者作为别的函数的返回值。
function funcA() {
console.log("函数的声明型态")
}
--> 调用方式 funcA(), (Function funcA()...)()
//表达式(一)
let funcB = function() {
console.log("函数的表达型态")
}
--> 调用方式 funcB(), (funcB)()
//表达式(二)
(function() { console.log("函数的表达型态2") })
--> 调用方式 (function() {})()
let funcC = function() {
console.log("函数的嵌套型态")
let funcD = function() {
console.log("函数D嵌套在函数C里面")
}
}
let funcE = function() {
let a = "funcE"
return function() {
alert("我是以闭包型态存在的函数"+a)
}
}
只有声明型态的函数才具有提升的特性。至於为什麽会有这种现象,在之後的作用域主题会得到解答。
console.log(funcA); // funcA() {return 0}
console.log(funcB); // undefined
//声明型态
function funcA() {
return 0
}
//标达型态
let funcB = function() {
return 1
}
上面的代码等同於 :
let funcB
function funcA() {
return 0
}
console.log(funcA); // funcA() {return 0}
console.log(funcB); // undefined
funcB = function() {
return 1
}
另外再看一个例子:
console.log(a); // undefined
console.log(b); // 报错,b is not defined
var a = 123;
let b = 456;
原因在於ES6提供了let,可以避免hoisting的问题发生。
IIFE(Immediately-invoked Function Expression,立即执行函数)为函数的一种调用方式,非常适合匿名函数调用。
(function() {
conosole.log("我是立即运行的匿名函数")
})();
(function() {
console.log("我也是立即运行的匿名函数")
}())
那既然有了IIFE,为何要有具名函数?
(function funcName(i) {
console.log(`函数名为${funcName.name},第${i}次调用`)
if(i<3) { //递归出口
funcName(++i) //递归
}
})(1)
//函数名为funcName,第1次调用
//函数名为funcName,第2次调用
//函数名为funcName,第3次调用
如果某个函数可以接收另一个函数作为参数,该函数就称为高阶函数。
function fn1(callback) {
if(callback){
callback();
}
}
fn1(function() {
alert("高阶函数")
})
>>: DAY18 MongoDB Replication 实战
今日文章目录 ToDoList 需求 事前准备 参考资料 ToDoList 需求 Q: 需要有哪些...
利用父类别的变数来存取子类别物件的成员 public class Test{ public stat...
今天要开始预告我们专案开发怎麽开发罗 Day06_专案预告 ...
前言 之前的文章介绍了如何利用 ReplicaSet 或 Replication Controlle...
对於AAC 这个音讯格式,可能大多数人都不太熟悉。但是AAC 是 iTunes 里常见的音乐档案格式...