JS 函数基础与递归原理
四种定义函数
- 匿名函数
- 具名函数
- 赋值函数
- 箭头函数
匿名函数
function (){
console.log('hi')
}
具名函数
function sayHi() {
console.log('hi')
}
赋值函数
let sayHi = function () {
console.log('hi')
}
箭头函数
箭头函数表达式的语法比函数表达式更简洁。更适用于那些本来需要匿名函数的地方 ,并且它不能用作构造函数。
let sayHi = () => console.log('hi')
变量
全局变量
- 顶级作用域里声明的变量
- window.xxx
let a = 1
window.a = 1
局部变量
- 用
{ }包括起来的代码为局部变量,除了使用window.a = 1声明变量,也不能使用var声明(历史遗留问题) - 作用域可以嵌套
{
let b = 1
}
b
// Uncaught ReferenceError: b is not defined
**作用域嵌套规则:**默认就近原则。查找声明时,向上取最近的作用域,查找声明过程与函数执行无关,声明值才是与函数执行相关。 静态作用域也叫「词法作用域」(编译原理的知识) 闭包:一个函数用到外部变量,那么这一组组合就形成==闭包==
function showName() {
let content = '变量被调用的时候就形成闭包'
function displayName() {
alert(content) //闭包
}
return displayName
}
let fn = showName()
fn()
函数提升
具名函数function fn()不管在何处声明,最终 JS 引擎解析的时候都会提升到前面。
add(3, 5)
function add(x, y) {
return x + y
}
// 8
匿名函数 let fn = funticon(){}fn 只是赋值,并不是函数名称,实际上该function并没有名称,这种==匿名函数的声明并不进行函数提升。==
add(3, 5)
let add = function (x, y) {
return x + y
}
// Uncaught ReferenceError: add is not defined